STM32CubeMX输出可调频率与占空比的PWM

1,新建工程,我选的是stm32f103zet6芯片,选择定时器的pwm功能。
2、配置时钟,我这里配的是内部时钟,有需要的可以自己改。
3、配置定时器,默认就可以,因为代码里面需要对配置的初始化代码进行修改的,而修改后才可以实现该功能。
4、生成代码后,修改代码,找到pwm初始化函数,修改为如下,注意要把初始化函数前面的 static 关键字也去掉,而且函数声明也要跟着修改。
                                    void mx_tim4_init(uint16_t pre,uint16_t pul) //修改初始化函数,改变频率与pwm{ //占空比=pulse/period;频率:f=48m/pre/per
tim_masterconfigtypedef smasterconfig; tim_oc_inittypedef sconfigoc;
htim4.instance = tim4; htim4.init.prescaler =pre; //分频(关键) htim4.init.period = 100-1;//计数周期 (关键,若100的计数周期对于一些频率跟占空比误差大的话,可以自己计算更改调试计数周期大小) htim4.init.countermode = tim_countermode_up; htim4.init.clockdivision = tim_clockdivision_div1; htim4.init.autoreloadpreload = tim_autoreload_preload_disable; if (hal_tim_pwm_init(&htim4) != hal_ok) { _error_handler(__file__, __line__); } smasterconfig.masteroutputtrigger = tim_trgo_reset; smasterconfig.masterslavemode = tim_masterslavemode_disable; if (hal_timex_masterconfigsynchronization(&htim4, &smasterconfig) != hal_ok) { _error_handler(__file__, __line__); }
sconfigoc.ocmode = tim_ocmode_pwm1; sconfigoc.pulse = pul;//脉冲计数(关键) sconfigoc.ocpolarity = tim_ocpolarity_high; sconfigoc.ocfastmode = tim_ocfast_disable; if (hal_tim_pwm_configchannel(&htim4, &sconfigoc, tim_channel_1) != hal_ok) { _error_handler(__file__, __line__); }
hal_tim_msppostinit(&htim4);
}
    5、接着在自己需要的代码里插入,pwm开始停止函数就可以啦。
   hal_tim_pwm_start(&htim4, tim_channel_1); //pwm开启函数mx_tim4_init(uint16_t pre,uint16_t pul);//改变参数就可实现改变占空比跟频率的目的了hal_tim_pwm_stop(&htim4, tim_channel_1);//停止pwm
    这里我说一下核心部分:        占空比=(pulse/period)*100%;        频率:f = clk/prescaler/period;    影响pwm占空比跟频率的参数这主要是pulse,prescaler,period;频率跟占空比都与period(计数周期)有关,只要我们把计数周期定下来,修改prescaler、跟pulse这两个值,就可以直接修改pwm的频率跟占空比了。具体要多少的占空比跟频率,就自己计算一下就可以了。    举个例子说明一下:这里period设为100,如果我要设定一个频率为1500hz、占空比5%的pwm波,只需要传入参数pulse=5(占空比=pulse/period*100%=(5/100)*100%=5%),prescaler=320(f=系统频率/分频/计数周期=48m/320/100=1500hz),逻辑分析仪采集结果如下图:
补充一点:如果频率要求快,而且精度要求高的,就选用晶振大的 stm32 系列,晶振大误差就小,这里如果定好占空比的话,只调频率可以调到很准确,或者定好频率调占空比也是一样,如果要同时改变频率跟占空比,频率高了就会有误差了,所以选用大晶振可以减小点误差。
    附一个根据我这里的晶振大小算出来的频率占空比表(已全部用示波器调试验证):

异步整流和同步整流的优缺点有哪些
美味生活启动百城万店计划,以3000元级售货机赋能门店新增量
快充技术与电池续航迭代,共享充电宝的未来该去哪里?
快充走向高电流高电压融合方案
UWB定位系统智慧工厂解决方案浅析
STM32CubeMX输出可调频率与占空比的PWM
有没有测量土壤的仪器@三体仪器推荐
细数门店客流量统计的那些技术
我国照明行业新的机遇在哪
柔性传感器在智能感知系统中的进展
红外技术研究 | 红外热成像在周界防护领域的应用(1)
2023年中国手机市场品牌排名:市场份额与增长趋势
如何让视觉AI应用开发化繁为简
步进电动机失步原因及危害
FPGA在语音存储与回放系统中的应用
复合门电路:与非门电路NAND电路图
欧洲半导体技术实力如何?
曾经神话的存在等离子电视为什么会被液晶电视打败?
modbus如何转CANopen网关
火星探测加速 天问一号完成第一次轨道中途修正