你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

利用STM32F407发送精确个数脉冲,控制伺服电机。  

[复制链接]
wjandsq 发布时间:2015-3-2 11:58
本帖最后由 wjandsq 于 2018-1-10 19:44 编辑

使用STM32F407的TIM3、TIM4精确发送固定个数脉冲,PC6、PB6两路500KHz PWM,用于控制两路伺服电机。

一、本例程的主要功能:

1.USB-CDC 功能(使用USART1-PA9 USART1-PA10)。
   PC机通过USB通讯发送控制命令到STM32,命令还可以通过USART1-PA9转发出去。

2.使用TIM3 CH1通道发送精确个数脉冲(使用PC6)。

  发送精确个数脉冲,需要启用TIM3 的DMA通讯,在每个脉冲周期结束时,
  DMA自动将内存中的占空比数据传输至CCR1,DMA传输的次数到达设定值N,
  则进入DMA传输完毕中断,此时已发送N-1个脉冲,因此在该中断中,
  设置TIM3 为单脉冲模式,脉冲发送自动停止。

  总脉冲个数  =  DMA传输次数(N) * DMA通讯中断次数(M)

  目前发现的bug描述:
  (1) 首次启动时,如果发送多个脉冲,则会出现多发1个脉冲的情况。
  (2) 首次启动时,如果发送单个脉冲,再发送多个脉冲,不会出现该bug。

  临时解决方案:
  启动时将一个特殊标志初始化为1。
  如果启动后就发送多个脉冲,则将脉冲数量减去1,然后将特殊标志清0。
  如果启动后发送单个脉冲,不会出现bug,所以要将那个特殊标志清0。

3.使用TIM4 CH1通道发送精确个数脉冲(使用PB6)。
  同上。

4.在RAM进行硬件仿真调试的说明
  本例程成功地验证了STM32F407可以在内部RAM中进行硬件仿真调试。
  注意DMA等的初始化,内存到外设的传输宽度为16位,只有设置正确,
  才能进入DMA传输完毕中断。

三、本例程软件改动如下:

1.在usb_conf.h的第179行,注释掉了 VBUS_SENSING_ENABLED 宏定义。
2.stm324xg_eval.h中增加USART1相关的宏定义:

#ifdef VBUS_SENSING_ENABLED
  #define EVAL_COM1                        USART3
  #define EVAL_COM1_CLK                    RCC_APB1Periph_USART3
  #define EVAL_COM1_TX_PIN                 GPIO_Pin_10
  #define EVAL_COM1_TX_GPIO_PORT           GPIOC
  #define EVAL_COM1_TX_GPIO_CLK            RCC_AHB1Periph_GPIOC
  #define EVAL_COM1_TX_SOURCE              GPIO_PinSource10
  #define EVAL_COM1_TX_AF                  GPIO_AF_USART3
  #define EVAL_COM1_RX_PIN                 GPIO_Pin_11
  #define EVAL_COM1_RX_GPIO_PORT           GPIOC
  #define EVAL_COM1_RX_GPIO_CLK            RCC_AHB1Periph_GPIOC
  #define EVAL_COM1_RX_SOURCE              GPIO_PinSource11
  #define EVAL_COM1_RX_AF                  GPIO_AF_USART3
  #define EVAL_COM1_IRQn                   USART3_IRQn
#else
  #define EVAL_COM1                        USART1
  #define EVAL_COM1_CLK                    RCC_APB2Periph_USART1
  #define EVAL_COM1_TX_PIN                 GPIO_Pin_9
  #define EVAL_COM1_TX_GPIO_PORT           GPIOA
  #define EVAL_COM1_TX_GPIO_CLK            RCC_AHB1Periph_GPIOA
  #define EVAL_COM1_TX_SOURCE              GPIO_PinSource9
  #define EVAL_COM1_TX_AF                  GPIO_AF_USART1
  #define EVAL_COM1_RX_PIN                 GPIO_Pin_10
  #define EVAL_COM1_RX_GPIO_PORT           GPIOA
  #define EVAL_COM1_RX_GPIO_CLK            RCC_AHB1Periph_GPIOA
  #define EVAL_COM1_RX_SOURCE              GPIO_PinSource10
  #define EVAL_COM1_RX_AF                  GPIO_AF_USART1
  #define EVAL_COM1_IRQn                   USART1_IRQn
#endif

3. usbd_cdc_vcp.h中,增加USART1相关的宏定义
#ifdef USE_STM3210C_EVAL
  #define EVAL_COM_IRQHandler            USART2_IRQHandler
#else
  #ifdef VBUS_SENSING_ENABLED
   #define EVAL_COM_IRQHandler            USART3_IRQHandler
  #else
   #define EVAL_COM_IRQHandler            USART1_IRQHandler
  #endif
#endif /* USE_STM322xG_EVAL */


4.USB内部或外部上拉电阻关闭与延迟打开的函数修改

void usb_start_delay(void)
{
    uint16_t i,j;
#ifdef VBUS_SENSING_ENABLED
    GPIOD->BSRRL = GPIO_Pin_6; /* 不启用外部USB上拉电阻 */
    for(i = 0; i < 10000; ++i){
        for(j = 0; j < 6000; ++j){

        }
    }
    GPIOD->BSRRH = GPIO_Pin_6; /* 启用外部USB上拉电阻 */
#else
    GPIOD->BSRRL = GPIO_Pin_6; /* 不启用外部USB上拉电阻 */
    DCD_DevDisconnect(&USB_OTG_dev); /* 不启用内部上拉电阻 */
    for(i = 0; i < 10000; ++i){
        for(j = 0; j < 6000; ++j){

        }
    }
    DCD_DevConnect(&USB_OTG_dev); /* 启用内部上拉电阻 */
#endif

}

5.USB虚拟串口的DTR RTS Break控制修改   可用DTR信号控制1路伺服电机正转还是反转。
   RTS信号无效,这是由于Windows USB驱动的问题造成的,ST依靠微软的USB驱动,  所以一直没有解决这个问题。
6.精确个数脉冲发送
在TIM3-CH1上(PC6)实现精确个数脉冲发送,用于控制第一路伺服电机
在TIM4-CH1上(PB6)实现精确个数脉冲发送,用于控制第二路伺服电机


四、工程包下载



五、解压工具
  下载最新的7z工具,7z938.exe,X86或X64均可。

六、调试说明
1.点击载入配置按钮,选择测试的配置文件, 多字符串发送功能区的字符串列表自动更新。

2.选择STM32的虚拟串口号,由于是USB通信, 可以不用理会波特率等参数,那是串口对外发送的
  波特率,这里通过USB传给STM32,通过串口向外发送的代码可以关掉,也可以保留。

3.点击启动发送,自动循环发送1-10个脉冲, 示波器测量PC6(第一路),可以看到脉冲数量的变化。








USB串口工具发送命令

USB串口工具发送命令
收藏 6 评论23 发布时间:2015-3-2 11:58

举报

23个回答
党国特派员 回答时间:2015-3-3 09:13:43
学习一下。   blank.png blank.png blank.png blank.png blank.png blank.png blank.png blank.png blank.png blank.png
kqh1120 回答时间:2015-3-2 15:56:14
学习了啊。还没用过伺服电机 1.png
yyh784 回答时间:2019-11-23 21:08:14

请不要随意伸手……
feel-376797 回答时间:2015-3-2 20:35:27
谢谢分享
bit 回答时间:2015-3-3 09:42:05
挺好的。用的什么伺服电机呢?
jor 回答时间:2017-7-31 08:37:26
楼主能发我工程包吗1023010634@qq.com
ty1148456099 回答时间:2017-8-27 16:01:45
求工程包 572083539@qq.com
boming 回答时间:2017-9-10 07:47:06
求工程包fengzhenbang@126.com
努力的人 回答时间:2017-9-10 11:25:26
建议楼主把资源直接发在帖子上,这样方便大家
andrewytf 回答时间:2018-3-2 17:15:40
求工程包 andrewytf@163.com
幻化仓龙 回答时间:2018-3-22 18:19:16
求工程包 37823542@QQ.com
zhenglu891028 回答时间:2018-4-19 21:13:57
求工程包 172814857@qq.com
soledad928 回答时间:2018-5-23 14:41:00
楼主,能把工程包分享一下吗 499296817@qq.com
飞翔-396652 回答时间:2019-3-27 14:12:11
谢谢分享 有空研究下
拖拉机先生 回答时间:2019-4-10 10:11:38
工程包下载怎么没有了
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版