如何用avr16单片机的OC0输出1.5ms脉宽20ms周期的PWM波?
就目前我所知道的先通过TCCR0设定模式例如快速PWMTOP值为0xFF即计数总值为255分频系数为1正相输出在这样的设定下如何通过设置OCR0的值来产生脉宽为1.5ms...
就目前我所知道的 先通过TCCR0设定模式 例如快速PWM TOP值为0xFF 即计数总值为255 分频系数为1 正相输出 在这样的设定下 如何通过设置OCR0的值来产生 脉宽为1.5ms 周期20ms的PWM波?
展开
1个回答
展开全部
你是要驱动舵机是吧?舵机的周期20ms的波的话对准度要求还是挺高的,用8位定时器0不太好,用16位定时器可以解决这个问题。。。如果必须用8位定时器0,快速PWM模式,系统时钟用6M或者8M,6,000,000怎么分频也分不出周期为20ms的波。这就需要软件处理,那就不分频,设置一个计数器“i” ,发生一次溢出中断i++。。。6,000,000/256=23437hz我们需要50hz,那就当i加到433的时候将io口拉高,if(i==468)时将io口拉低,这样也可以。
更多追问追答
追问
后面不太懂 为什么是433 然后怎么又变了468?
追答
23437/50=468也就是i 要记468次数,因为你要求1.5ms的脉宽,占空比=1.5/20=0.075.。。。。。然后468*(1-0.075)=433也就是先给433次低电平,然后给35次高电平,形成占空比,这样做有个坏处就是程序占用cpu
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询