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

利用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 评论22 发布时间:2015-3-2 11:58

举报

22个回答
zfz0122 回答时间:2015-3-2 15:56:14
学习了啊。还没用过伺服电机 1.png
feel-376797 回答时间:2015-3-2 20:35:27
谢谢分享
党国特派员 回答时间: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
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
suning007 回答时间: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
123下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版