历史上的今天
返回首页

历史上的今天

今天是:2024年12月31日(星期二)

正在发生

2021年12月31日 | 4412 PWM

2021-12-31 来源:eefocus

一、PWM原理

1.有源蜂鸣器和无源蜂鸣器的概念

  • 有源蜂鸣器高电平就响,无源蜂鸣器需要PWM波才响。

2.PWM脉冲波

  • PWM = 定时器 + 定时器中断(重载) + IO输出(翻转)

3.分析原理图

  • GPIO-GPD0_0

  • XpwmTOUT0定时器0,同上面IO口

4.pwm定时器上的资源

  1. 5个32位定时器

  2. 定时器会产生内部中断

  3. 定时器0,1,2,3可以通过编程实现PWM,定时器4有内部计时而没有输出

  4. 定时器都有各自对应的分频区

  5. TCNTBn--,TCNTBn=TCMPBn

5.分频器 图形24-2

    XpwmTOUT0 = PRESCALER0 + MUX + TCMPB0 + TCNTB0

6.例子分析

  1. 开启自动重载

  2. 设置TCNTBn和TCMPBn寄存器

  3. 手动设置

  4. 设置自动翻转,更新TCNTBn和TCMPBn寄存器

  5. 再次设置TCNTBn和TCMPBn寄存器(双缓冲再次更新)

  6. 定时器开启

  7. TCNTBn--,TCNTBn=TCMPBn,翻转

  8. TCNTn=0,产生中断

  9. 自动重载

  10. TCNTBn--,TCNTBn=TCMPBn,翻转

  11. TCNTn=0,产生中断

  12. 自动重载,产生中断。然后关闭自动重载

  13. TCNTBn--,TCNTBn=TCMPBn,翻转

  14. TCNTn=0,关闭自动重载,不再产生中断

  15. 自动重载关闭,停止。

7.简单用法

  1. GPIO-GPD0_0设置为PWM输出GPD0CON[0] = 0x02

  2. TCFG0 预分频(1-255)

  3. TCFG1分频(1,2,4,8,16)

  4. 设置占空比:TCMPB0 和 TCNTB0 (TCMPB0

  5. 设置自动重载,开启定时器,自动翻转等。TCON 寄存器

 二、pwm的ioremap

1.配置步骤

  1. GPD0_0设置为pwm输出GPD0CON[0]=0x02

  2. TCFG0预分频(1-255)

  3. TCFG1分频(1.2.4.8.16)

  4. 设置占空比:TCMPB0和TCNTB0(TCMPB0

  5. 设置自动重载,开启定时器等

  6. TCON寄存器

2.写代码

 beep驱动

pwm


#include

#include


#include

#include

#include


#include

#include

#include

#include


#include


#define DRIVER_NAME "PWM"

#define DEVICE_NAME "PWM"


MODULE_LICENSE("Dual BSD/GPL");

MODULE_AUTHOR("TOPEET");


struct pwm_addr{

        unsigned int TCFG0;

        unsigned int TCFG1;

        unsigned int TCON;

        unsigned int TCNTB0;

        unsigned int TCMPB0;

        unsigned int TCNTO0;

        unsigned int TCNTB1;

        unsigned int TCMPB1;

        unsigned int TCNTO1;

        unsigned int TCNTB2;

        unsigned int TCMPB2;

        unsigned int TCNTO2;

        unsigned int TCNTB3;

        unsigned int TCMPB3;

        unsigned int TCNTO3;

        unsigned int TCNTB4;

        unsigned int TCNTO4;

        unsigned int TINT_CSTAT;

}*PWM;


//sotre virtual address and physical address

volatile unsigned long virt_addr, virt_addr_gpio, phys_addr, phys_addr_gpio;

volatile unsigned long *GPD0CON, *GPD0PUD;


static void addr_init(void)

{

        phys_addr = 0x139D0000;         //(PWM Base Address)

        virt_addr = (unsigned long)ioremap(phys_addr, 0x48);    //maybe 0x32 not enough

        PWM = (struct pwm_addr*)(virt_addr + 0x00);


        phys_addr_gpio = 0x11400000+0xA0;       //GPD0

        virt_addr_gpio = (unsigned long)ioremap(phys_addr_gpio, 0x24);

        GPD0CON = (unsigned long*)(virt_addr_gpio + 0x00);

        GPD0PUD = (unsigned long*)(virt_addr_gpio + 0x00A8 - 0x00A0);

}


static void PWM_Init(void)

{

        addr_init();

        /* config gpio */

        *GPD0CON &= ~(0xf);

        *GPD0CON |= 0x2;                //TOUT_0

        *GPD0PUD &= ~(0x03);    //disable pull-up/pull-down


        //prescaler0 0-254 + 1

        (*PWM).TCFG0 = (((*PWM).TCFG0&(~(0xff)))|(0xf9));

        //prescaler1 1.2.4.8.16

        (*PWM).TCFG1 = ((*PWM).TCFG1&(~(0xf)))|(0x2);

        //set duty cycle

        (*PWM).TCMPB0 = 50;

        (*PWM).TCNTB0 = 100;

        //set auto-reload,timer on

        (*PWM).TCON = ((*PWM).TCON & (~(0xf))) | (0x1) | (0x2);

}


static void beep_on(void)

{

        (*PWM).TCON = ((*PWM).TCON & (~(0xf)))|(0x1)|(0x8);

}


static void beep_off(void)

{

        (*PWM).TCON = ((*PWM).TCON & (~(0xf)))|(0x0);

        //After timer stop,GPIO = 0;

        *GPD0CON = (*GPD0CON & (~(0xf)))|(0x0);

}


static int iTop4412_PWM_init(void)

{

        PWM_Init();

        beep_on();

        return 0;

}


static void iTop4412_PWM_exit(void)

{

        beep_off();

}


module_init(iTop4412_PWM_init);

module_exit(iTop4412_PWM_exit);


测试结果:


[root@iTOP-4412]# insmod pwm.ko                                                        

[root@iTOP-4412]# rmmod pwm  


加载后蜂鸣器开启,不过频率不对

 

总结:根据逻辑框图中的寄存器名字,在PDF中搜索然后依次配置它。找到一个后,可以往下翻。类似的可能会在一起

上一篇:4412 按键和中断

下一篇:4412 RS485

推荐阅读

史海拾趣

冠图电子(GTL-POWER)公司的发展小趣事

冠图电子(GTL-POWER)发展故事之一:初创与技术积累

冠图电子(GTL-POWER)的故事始于2009年,当时它作为一家专注于中小功率模块电源、定制电源的新兴企业在广州成立。创始人凭借对电力电子技术的深刻理解和敏锐的市场洞察力,组建了一支专业的研发团队,致力于高品质模块电源的研发与生产。在公司成立初期,团队就明确了技术创新和质量为先的发展策略,逐步建立了微功率模块电源样品生产线,为后续的发展奠定了坚实基础。

冠图电子(GTL-POWER)发展故事之二:市场拓展与战略布局

随着技术实力的不断增强,冠图电子开始积极拓展市场。2010年至2012年间,公司先后在北京、上海、深圳等城市设立了办事处,构建了遍布全国的销售网络。这一战略布局不仅拓宽了销售渠道,还加强了与当地客户的紧密联系,进一步提升了品牌知名度。同时,公司还根据市场需求,不断优化产品结构,推出了多款具备自主知识产权的特色产品,如宽压DC-DC模块电源、光伏电源等,深受市场欢迎。

冠图电子(GTL-POWER)发展故事之三:技术突破与行业标准

冠图电子在技术创新方面不断取得突破,陆续开发了多款具有行业领先水平的电源产品。例如,公司成功开发出小型全功能单列直插DC-DC模块电源,解决了传统电源体积大、效率低的问题。此外,冠图电子还积极参与行业标准的制定工作,通过技术创新推动整个电源行业的发展。这些努力不仅提升了公司的行业地位,还为客户提供了更加可靠、高效的电源解决方案。

冠图电子(GTL-POWER)发展故事之四:品质管理与国际认证

为了确保产品质量,冠图电子建立了严格的质量管理体系,并通过了ISO9001权威认证。公司注重生产过程的每一个环节,从原材料采购到成品出厂都实行严格的质量控制。这种对品质的执着追求使得冠图电子的产品在市场上赢得了良好的口碑,吸引了来自全球30多个国家的600多家客户。国际市场的认可不仅提升了公司的品牌形象,还为公司带来了更多的业务机会。

冠图电子(GTL-POWER)发展故事之五:客户服务与持续发展

冠图电子始终坚持以客户为中心的服务理念,为客户提供从项目咨询、系统设计到技术支持的一站式服务。公司拥有一支专业的客服团队,能够迅速响应客户需求并提供专业的解决方案。此外,冠图电子还注重与客户的长期合作,通过持续改进产品和服务来满足客户的不断变化的需求。这种以客户为导向的发展策略使得冠图电子在激烈的市场竞争中保持了稳步发展,并逐渐成长为一流的微功率模块电源、定制电源供应商。

光磊(GL)公司的发展小趣事

关于晶体管水位自动控制电路,网友们可能会提出多种问题,这些问题可能涉及电路的工作原理、设计细节、实际应用中的挑战以及故障排除等方面。以下是一些可能的问题及相应的回答:

问题1: 晶体管水位自动控制电路的基本工作原理是什么?

回答: 晶体管水位自动控制电路通常利用浮子开关(或水位传感器)来检测水位的变化,当水位达到预设的上下限时,浮子开关会闭合或断开,从而改变晶体管的导通状态。晶体管作为开关元件,控制着继电器(或其他负载)的通断,进而控制水泵(或其他执行机构)的启停,以实现水位的自动调节。

问题2: 如何设计电路以确保准确性和稳定性?

回答: 设计时需要考虑多个因素,包括选择合适的晶体管类型(如NPN或PNP型)、合适的电阻值以限制电流并保护晶体管、使用稳定可靠的水位传感器、以及设计合理的防抖动电路来避免误操作。此外,还需进行充分的测试和调整,确保电路在不同水位和工况下都能准确、稳定地工作。

问题3: 在实际应用中,如何避免误报警或误动作?

回答: 误报警或误动作通常是由于水位传感器的误判或电路的干扰引起的。为了避免这种情况,可以采取以下措施:一是选用高质量、高灵敏度的水位传感器;二是增加滤波电路,减少电路中的噪声和干扰;三是设置合理的延时电路,避免由于水位短暂波动而引起的误动作;四是定期对电路进行检查和维护,确保各部件工作正常。

问题4: 如何调整电路的灵敏度以适应不同的水位控制需求?

回答: 电路的灵敏度可以通过调整电阻值、改变晶体管的型号或选择不同特性的水位传感器来实现。例如,增大电阻值可以减小电路的灵敏度,使得电路对水位变化的响应更加迟缓;反之,减小电阻值则可以提高电路的灵敏度。此外,也可以根据实际需求选择不同精度的水位传感器,以满足不同的控制精度要求。

问题5: 如果电路出现故障,应该如何进行排查和修复?

回答: 当电路出现故障时,首先应检查电源是否正常供电;然后检查水位传感器是否损坏或接触不良;接着检查晶体管、电阻等元件是否损坏或焊接不良;最后检查电路连线是否正确无误。在排查过程中,可以使用万用表等工具进行电压、电流等参数的测量和分析。一旦找到故障点,就可以根据具体情况进行修复或更换元件。

兆易创新(GigaDevice)公司的发展小趣事

对于热电偶隔离缓冲放大电路,网友可能会有多种问题,以下是一些常见问题及其回答:

一、技术问题

  1. 什么是热电偶隔离缓冲放大电路?
    • 回答:热电偶隔离缓冲放大电路是一种专门用于热电偶信号处理的电路,它能够将热电偶产生的微弱电压信号进行放大,并通过隔离技术消除干扰信号,确保信号的准确性和稳定性。这种电路通常包括放大器和隔离器两部分,放大器用于增强信号,而隔离器则用于隔离输入和输出之间的电气连接,防止噪声和干扰的传递。
  2. 为什么需要热电偶信号的隔离和缓冲?
    • 回答:热电偶信号通常非常微弱,且易受到环境噪声和电磁干扰的影响。隔离可以切断输入和输出之间的直接电气连接,防止噪声和干扰信号进入测量系统,提高测量的准确性和可靠性。缓冲则可以减小负载对热电偶信号的影响,保护热电偶免受损坏,并稳定信号输出。
  3. 如何选择适合的热电偶隔离缓冲放大电路?
    • 回答:选择适合的热电偶隔离缓冲放大电路时,需要考虑多个因素,包括热电偶的类型、测量范围、精度要求、工作环境等。此外,还需要关注电路的输入阻抗、输出阻抗、增益稳定性、噪声水平等性能指标,以确保电路能够满足实际应用的需求。

二、实际应用问题

  1. 热电偶隔离缓冲放大电路在工业现场的应用有哪些?
    • 回答:热电偶隔离缓冲放大电路在工业现场有广泛的应用,如温度测量、温度控制、热处理过程监控等。它们可以用于测量各种高温、低温环境下的温度,并通过与控制器、记录仪等设备配合使用,实现对温度的精确控制和记录。
  2. 如何安装和调试热电偶隔离缓冲放大电路?
    • 回答:安装和调试热电偶隔离缓冲放大电路时,需要按照产品说明书的要求进行操作。一般来说,需要先将热电偶与电路的输入端正确连接,然后调整电路的增益、零点等参数,使输出信号符合实际应用的需求。在调试过程中,需要注意观察电路的输出信号是否稳定、准确,并检查是否有噪声和干扰信号的存在。
  3. 热电偶隔离缓冲放大电路的维护和保养有哪些注意事项?
    • 回答:热电偶隔离缓冲放大电路的维护和保养非常重要,可以延长电路的使用寿命并保证其性能稳定。在使用过程中,需要定期检查电路的接线是否牢固、元器件是否损坏、输出信号是否准确等。如果发现异常情况,应及时处理并更换损坏的元器件。此外,还需要注意保持电路的清洁和干燥,避免灰尘和水分进入电路内部导致故障。

三、其他问题

  1. 热电偶隔离缓冲放大电路的成本如何?
    • 回答:热电偶隔离缓冲放大电路的成本因产品型号、性能指标和生产厂家等因素而异。一般来说,高精度、高稳定性的电路成本会相对较高。在选择电路时,需要根据实际需求和预算进行综合考虑。
  2. 热电偶隔离缓冲放大电路的发展趋势是什么?
    • 回答:随着工业自动化和智能化的发展,热电偶隔离缓冲放大电路也在不断向高精度、高稳定性、高集成度方向发展。未来,这种电路可能会采用更先进的集成电路技术和信号处理技术,提高测量精度和抗干扰能力,并降低成本和功耗。同时,随着物联网技术的发展,热电偶隔离缓冲放大电路也可能会与无线通信技术相结合,实现远程监控和智能控制等功能。
中科银河芯(GXCAS)公司的发展小趣事
在饱和状态下,三极管失去了放大作用,其集电极电流主要由基极电流决定,而不再受输入信号电压的显著影响。
Dae Ryung Electronic Co Ltd公司的发展小趣事

随着技术实力的增强,Dae Ryung Electronic Co Ltd公司开始积极拓展市场。公司制定了国际化战略,逐步进入国际市场。通过参加国际展会、与海外企业建立合作关系等方式,公司成功打开了海外市场的大门。同时,公司还针对不同地区的市场需求,推出定制化的产品和服务,进一步提升了市场竞争力。

启臣微(Chip)公司的发展小趣事

在产品质量方面,启臣微始终坚持严格的标准和精细的工艺流程。公司建立了一套完善的质量管理体系,从原材料采购到产品出厂,每一个环节都经过严格把关。这种对品质的执着追求,让启臣微的产品在市场上赢得了良好的口碑,也为公司赢得了众多客户的信赖。

问答坊 | AI 解惑

飞思卡尔单片机_SDIDE软件

飞思卡尔单片机_SDIDE软件 …

查看全部问答>

如何推广EEWORLD

1.登陆EEWORLD论坛,进入旧版首页,在右上角找到“控制面板”,点击控制面板,如下图: 2.点击“访问推广”,进入如下图所示界面: 按照提示操作,将您的推广链接1或者2均可,发送给您的朋友,当您的朋友访问该链接,并注册成为新会员, ...…

查看全部问答>

如何获取已经打开的串口句柄?

    各位,如何获取已经打开的串口句柄?     望执教!…

查看全部问答>

ARM9外中断问题

U8 key; U8 Key_Scan( void ) {         Delay( 80 ) ;         if(      (rGPGDAT&(1…

查看全部问答>

驱动加载程序中,在StartService()后,通过GetLastError()返回3错误(〖3〗-系统找不到指定的路径。)

    驱动加载程序中,在StartService()后,通过GetLastError()返回3(〖3〗-系统找不到指定的路径。)    在虚拟机运行的,一开始是好的,暂停第二次打开 ,无论如何加载时运行到StartService()后的GetLastError()返回都是 ...…

查看全部问答>

寻:windows ce驱动及底层开发人员

现有一国外项目需要有windows ce驱动或底层开发经验的人, 有意者请msn或邮件联系:jackin_lau@hotmail.com…

查看全部问答>

也来秀一下DIY,160*80带触摸液晶模块做的多功能时钟~~~~~~

哈哈,其实这个屏是去年电赛的时候买的,正好也用上了,不过用得比较简单,感觉有点可惜了就干脆做了一个完整的模块,估计有的朋友还记得之前小弟发的第一次做PCB的帖子吧,就是给这个做的,这个是当时的链接 https://bbs.eeworld.com.cn/thre ...…

查看全部问答>

TL494制作的恒流限压充电器电路

      我按照图上的电路做了一个充电器(图中的r12,r20我改为两个0.1/5w的电阻了),充10AH/24V的镍氢动力电池,但是在试验中发现随着充电电压的升高,电流在慢慢下降,达不到恒流,例如:24v电池理论充电终止电压是29v,但是在电 ...…

查看全部问答>

micrf506

用起来比较麻烦,但不加PA情况下可以到450米(实测)。…

查看全部问答>