u013159804 2016-05-01 17:32 采纳率: 0%
浏览 2544

如下,STM32F103RCT6怎么产生15.6K占空比可调的PWM

现在硬件已经确定
引脚A8,A9,A10 功能有TIM1 CH 1,2,3
左电机A,B,C三相 0时关断 1时导通 上MOSFET接VIN
引脚B13,B14,B15 功能有TIM1 CH 1 N,2 N,3 N
左电机A,B,C三相 1时关断 0时导通 下MOSFET接GND

引脚C6,C7,C8 功能无 重定义功能TIM3 CH 1,2,3
右电机A,B,C三相 0时关断 1时导通 上MOSFET接VIN
引脚A7,B0,B1 功能有TIM3 CH 2,3,4 重定义功能 TIM1 CH 1N,2N,3N
右电机A,B,C三相 1时关断 0时导通 下MOSFET接GND

STM32使用内部晶振 64M主频

现在两个电机 共6个桥臂,每个桥臂有两个MOS管

问题是 目前需要这6个桥臂都能产生15.6K,占空比精度至少为1.2%的PWM,该PWM的产生,当输出为高时,上MOS导通,下MOS关断。当输出为低时,上MOS关断,下MOS导通。即同一时刻上下MOS必须有且只有一个导通。另外同一个电机的3个桥臂PWM输出需要中心对齐。左电机用TIM1没有问题,关键是右电机功能冲突,配不出来像样的PWM。

楼主目前只分析出来并尝试了以下几种方案:

1.用定时中断计数,计数值在某个范围内时控制电平翻转。由于64M主频,15.6K的PWM,占空比精度1.2%的话,也就是需要50个时钟周期就需要进行一次中断,并且执行完中断函数中的各类判断的语句。处理速度跟不上,用不成。

2.用定时器中断进行电平翻转,同时改变定时器中断周期。这样在两次定时器中断之间,由于需要执行一部分程序,会存在一个最小的延时。这种方法可以产生15.6K 占空比在6%~94%之间可满足精度要求的占空比。但存在的问题是需要有三个PWM输出,而且是中心对齐。如果在同一个定时器中去按上面这个方法去做,那么两个PWM占空比至少得相差6%,而实际上两者之间可相差任意值。另外如果是用TIM2,TIM3,TIM4这四个定时器的中断分别翻转来控制产生占空比,那怎么对齐呢?有点想不通了。。

3.在WHILE(1)的大循环里面用计时器计数,进行电平翻转,这样可以正常输出。但问题是在执行中断时,会影响到计数,输出波形不稳定。

4.另外还有一个是直接用TIM3,用C6,C7,C8输出PWM,可以控制接VIN的3个MOS管导通或者关断,但无法保证接GND的3个MOS管在合适的时间导通或者关断。楼主对STM32了解还不是特别深入,了解到PWM输出是通过比较设定值与当前计数值大小来进行输出的,但不清楚是不是可以通过这个设定值与当前计数值比较产生中断呢,如果能通过这种方法产生中断,就可以在中断中翻转对应桥臂的下MOS管,这样就可以在上MOS关开通时,下MOS管关断,上MOS管关断时,下MOS管开通了。

求教求教,谢谢大家!

  • 写回答

1条回答 默认 最新

  • devmiao 2016-05-01 21:13
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题