关于发变频固定脉冲数PWM的方法

qq_31195831 2016-11-15 05:10:48
1.使用两个定时器
2.定时器A发PWM,另外一个定时器B周期是1ms;
3.定时器A的中断里面做标志的判断,当前是加速还是减速,或者是匀速,标志位传递到定时器B中断里,定时器B中断里面进行频率数值的加减,同时在一个其他的主循环函数里面进行定时器ARR的赋值(可以保证“实时”的改变频率值);
4.那么问题来了,这样做,两个中断之间的数据传递会有问题吗?比如标志位会改变等等,坐等大神回复。
...全文
712 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
小方木 2020-03-30
  • 打赏
  • 举报
回复


是这样的吗
qq_31195831 2016-12-23
  • 打赏
  • 举报
回复
引用 9 楼 pcalling 的回复:
[quote=引用 7 楼 lr2131 的回复:] [quote=引用 6 楼 qq_31195831 的回复:] [quote=引用 5 楼 lr2131 的回复:] 你是不是要做变频的PWM,B定时器做变频,A做PWM? 全局变量,注意带关键字volatile,然后,如果读写的话,看看要不要加临界区的加解锁,可以的话,尽量不要用。
为什么要加volatile关键字呢,和不用有什么区别吗,能麻烦解释一下吗[/quote] 给你个总结,全局变量,在多线程或者类似于“多线程”的中读写访问,都应该加这个关键字,否者,出现读“脏数据”的现象。 多线程自不必多说,单片机上的操作系统,你用过就该知道多线程的情况。 但如果不上任何操作系统,中断和中断,中断和main也可以理解成“多线程”的性质。 为什么要加voaltile,这是单片机嵌入式工程师必须要清楚的,不然经常栽更头还不知道是什么原因。 不加volatile,编译器会把全局变量优化到寄存器中,有时甚至优化到cache中,不同的线程在访问这个全局变量时,有的线程读取的是这个全局变量的原始地址,有的线程访问的是这个线程在优化后的寄存器或cache,如果线程交错访问,就可能出现读到脏数据的现象,导致程序渐入错误的流程。 [/quote] 总结的很好啊。我想说我一般会用register关键字。[/quote] 这是为什么呢,嚎
pcalling 2016-12-22
  • 打赏
  • 举报
回复
引用 7 楼 lr2131 的回复:
[quote=引用 6 楼 qq_31195831 的回复:] [quote=引用 5 楼 lr2131 的回复:] 你是不是要做变频的PWM,B定时器做变频,A做PWM? 全局变量,注意带关键字volatile,然后,如果读写的话,看看要不要加临界区的加解锁,可以的话,尽量不要用。
为什么要加volatile关键字呢,和不用有什么区别吗,能麻烦解释一下吗[/quote] 给你个总结,全局变量,在多线程或者类似于“多线程”的中读写访问,都应该加这个关键字,否者,出现读“脏数据”的现象。 多线程自不必多说,单片机上的操作系统,你用过就该知道多线程的情况。 但如果不上任何操作系统,中断和中断,中断和main也可以理解成“多线程”的性质。 为什么要加voaltile,这是单片机嵌入式工程师必须要清楚的,不然经常栽更头还不知道是什么原因。 不加volatile,编译器会把全局变量优化到寄存器中,有时甚至优化到cache中,不同的线程在访问这个全局变量时,有的线程读取的是这个全局变量的原始地址,有的线程访问的是这个线程在优化后的寄存器或cache,如果线程交错访问,就可能出现读到脏数据的现象,导致程序渐入错误的流程。 [/quote] 总结的很好啊。我想说我一般会用register关键字。
lr2131 2016-11-16
  • 打赏
  • 举报
回复
你是不是要做变频的PWM,B定时器做变频,A做PWM? 全局变量,注意带关键字volatile,然后,如果读写的话,看看要不要加临界区的加解锁,可以的话,尽量不要用。
qq_31195831 2016-11-16
  • 打赏
  • 举报
回复
引用 3 楼 xuweiwei1860 的回复:
[quote=引用 2 楼 qq_31195831 的回复:] [quote=引用 1 楼 xuweiwei1860 的回复:] 简单就用一个全局变量
哥们,你说的好轻松啊。。。[/quote] 我做过啊 开启两个定时器,在中断处理函数中分别设置gpio 的输出0和1。主函数中计算频率然后修改定时器的定时时间。真不难[/quote] 你做的是翻转。。。 我说的是定时器的PWM功能,还要做加减速 如果说的不是一回事就别回复了。。。谢谢大神
fly 100% 2016-11-16
  • 打赏
  • 举报
回复
引用 2 楼 qq_31195831 的回复:
[quote=引用 1 楼 xuweiwei1860 的回复:] 简单就用一个全局变量
哥们,你说的好轻松啊。。。[/quote] 我做过啊 开启两个定时器,在中断处理函数中分别设置gpio 的输出0和1。主函数中计算频率然后修改定时器的定时时间。真不难
qq_31195831 2016-11-16
  • 打赏
  • 举报
回复
引用 1 楼 xuweiwei1860 的回复:
简单就用一个全局变量
哥们,你说的好轻松啊。。。
fly 100% 2016-11-16
  • 打赏
  • 举报
回复
简单就用一个全局变量
qq_31195831 2016-11-16
  • 打赏
  • 举报
回复
引用 7 楼 lr2131 的回复:
[quote=引用 6 楼 qq_31195831 的回复:] [quote=引用 5 楼 lr2131 的回复:] 你是不是要做变频的PWM,B定时器做变频,A做PWM? 全局变量,注意带关键字volatile,然后,如果读写的话,看看要不要加临界区的加解锁,可以的话,尽量不要用。
为什么要加volatile关键字呢,和不用有什么区别吗,能麻烦解释一下吗[/quote] 给你个总结,全局变量,在多线程或者类似于“多线程”的中读写访问,都应该加这个关键字,否者,出现读“脏数据”的现象。 多线程自不必多说,单片机上的操作系统,你用过就该知道多线程的情况。 但如果不上任何操作系统,中断和中断,中断和main也可以理解成“多线程”的性质。 为什么要加voaltile,这是单片机嵌入式工程师必须要清楚的,不然经常栽更头还不知道是什么原因。 不加volatile,编译器会把全局变量优化到寄存器中,有时甚至优化到cache中,不同的线程在访问这个全局变量时,有的线程读取的是这个全局变量的原始地址,有的线程访问的是这个线程在优化后的寄存器或cache,如果线程交错访问,就可能出现读到脏数据的现象,导致程序渐入错误的流程。 [/quote] 多谢,明白了
lr2131 2016-11-16
  • 打赏
  • 举报
回复
引用 6 楼 qq_31195831 的回复:
[quote=引用 5 楼 lr2131 的回复:] 你是不是要做变频的PWM,B定时器做变频,A做PWM? 全局变量,注意带关键字volatile,然后,如果读写的话,看看要不要加临界区的加解锁,可以的话,尽量不要用。
为什么要加volatile关键字呢,和不用有什么区别吗,能麻烦解释一下吗[/quote] 给你个总结,全局变量,在多线程或者类似于“多线程”的中读写访问,都应该加这个关键字,否者,出现读“脏数据”的现象。 多线程自不必多说,单片机上的操作系统,你用过就该知道多线程的情况。 但如果不上任何操作系统,中断和中断,中断和main也可以理解成“多线程”的性质。 为什么要加voaltile,这是单片机嵌入式工程师必须要清楚的,不然经常栽更头还不知道是什么原因。 不加volatile,编译器会把全局变量优化到寄存器中,有时甚至优化到cache中,不同的线程在访问这个全局变量时,有的线程读取的是这个全局变量的原始地址,有的线程访问的是这个线程在优化后的寄存器或cache,如果线程交错访问,就可能出现读到脏数据的现象,导致程序渐入错误的流程。
qq_31195831 2016-11-16
  • 打赏
  • 举报
回复
引用 5 楼 lr2131 的回复:
你是不是要做变频的PWM,B定时器做变频,A做PWM? 全局变量,注意带关键字volatile,然后,如果读写的话,看看要不要加临界区的加解锁,可以的话,尽量不要用。
为什么要加volatile关键字呢,和不用有什么区别吗,能麻烦解释一下吗
基于IGBT的变频电源设计本科毕业论文资料: 1 引言 众所周知,我们所使用的市电频率是50Hz,但是,在实际生活中,有时需要的电源频率不是50Hz。电气化铁路是我国铁路展的方向,25Hz电源是电气化铁路区段信号系统的关键设备。在航空航天领域大量使用的电源是400Hz的电源。由此可以看出在很多场合,需要电源的频率并不是市电所提供的50Hz。结果造就变频电源的产生。在现实生活中变频电源广泛应用于航空、机械、轻工等行业。1969年世界上诞生第一台逆变电源,由于其具有调节特性优良、而且体积小、重量轻、功耗低,在电子和电气领域得到了迅速的推广应用。 逆变器从1969年展到今天,经历了几十年的展过程。其控制方法也出现了许多,大致可以分为:变压和变频控制方法。目前采用较多的是变压中的脉宽调制技术即PWM控制技术,即利用控制输出电压的脉冲宽度,将直流电压调制成等幅宽度可变的交流输出电压脉冲,来控制输出电压的有效值、控制输出电压谐波的分布和抑制谐波。PWM技术可以迅速地控制输出电压,及其有效地进行谐波抑制,它的动态响应好,在输出电压质量、效率等诸方面有着明显的优点。 根据形成PWM波原理的不同,可以分为以下几种:矩形波PWM、正弦波SPWM、空间相量PWM(SVM)、特定谐波消除PWM、电流滞环PWM等。这四类PWM波各有优缺点,因而适用于不同的场合。 SPWM的全称是Sine Pulse Width Modulation,意思是正弦脉冲宽度调制[1],简称为SPWM,是调制波为正弦波、载波为三角波或锯齿波的一种脉宽调制法,它是1964年由A.Schonung和H.Stemmler把通讯系统的调制技术应用到逆变器而产生的。后来由Bristol大学的S.R. Bo wer等于1975年对该技术正式进行了推广应用。这项技术的特点是原理简单,通用性强,控制和调节性能好,具有消除谐波、调节和稳定输出电压的多种作用,是一种比较好的波形改善法。它的出现为中小型逆变器的展起了重要的推动作用。 传统的电源采用都是模拟控制系统,模拟控制经过多年的展,己经非常成熟。然而,模拟控制有着固有的缺点:控制电路的元器件比较多,电路复杂,所占体积大,制造成本比较高;灵活性不够,硬件电路设计好了,控制策略就无法改变;最主要的是逆变电源不便于调试,大量的模拟元器件使其之间的连接相当复杂,从而使系统的故障检测与维修比较困难。模拟器件的老化问题和不可补偿的温漂问题,以及易受环境(如电磁噪声,上作环境温度等)干扰等因素都会影响控制系统的长期稳定性。近年来高速MCU技术的成熟和普遍,与其采用哈佛结构、流水线操作,即程序、数据存储器彼此相互独立,在每一时钟周期中能完成取指、译码、读数据以及执行指令等多个操作从而大大减少指令执行周期。高速数字MCU的展,正弦波逆变器的控制技术方案也由传统的模拟控制向现代数字化控制的方向展。采用数字化控制,不仅可以大大降低控制电路的复杂程度,提高电源设计和制造的灵活性,而且可以采用更先进的控制方法,从而提高逆变电源系统输出波形的质量和可靠性。基于MCU的展上逆变电源技术正朝者以下几种趋势展: 1 高频化 理论分析和实践经验表明:电器产品的变压器、电感和电容的体积重量与供电频率的平方根成反比。所以当我们把频率从工频50Hz提高到20khz,提高400倍的话,用电设备的体积重量大体下降至工频设计的5--10%,其主要材料可以节约90%甚至更高,还可以节电30%甚至更多。由于功率电子器件工作频率上限的逐步提高,促使许多原来采用电子管的传统高频设备固态化,原材料消耗显著降低、电源装置小型化、系统的动态反应加快,更可以深刻体现技术含量的价值。 2 数字化 现在数字式信号,数字电路越来越重要,数字信号处理技术日趋完善成熟,显示出越来越多的优点,便于计算机处理控制、避免模拟信号的畸变失真、提高系统抗干扰能力、便于软件包调试、也便于自诊断,容错等技术的植入,同时也为电源的并联技术展提供了方便。 3 绿色化 随着各种政策法规的出台,对无污染的绿色电源的呼声越来越高。绿色电源的含义有两层:首先是显著节电,这意味着电容量的节约,而电是造成环境污染的重要原因,所以节电就可以减少对环境的污染;其次这些电源不能对电网产生污染。为了使电源系统绿色化,电源应加装高效滤波器,还应在电网输入端采用功率因数校正技术和软开关技术。提高输入功率因数具有重要意义,不仅可以减少对电网的污染,降低市电的无功损耗,起到环保和节能的效果,而且还能减少相应的投资,提高运行可靠性。提高功率因数的传统方法是采用无源功率因数校正技术,目前较先进的方法是:单相输入的采用有源功率因数校正技术。 本设计主要是采用等效面积算法来计算逆变产生SPWM波形[2],保持输出波形不失真。同时,通过89

27,509

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧