4412 PWM

发布者:chunxing最新更新时间:2022-01-27 来源: eefocus关键字:PWM  蜂鸣器 手机看文章 扫描二维码
随时随地手机看文章

一、PWM原理

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

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

2.PWM脉冲波

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中搜索然后依次配置它。找到一个后,可以往下翻。类似的可能会在一起

关键字:PWM  蜂鸣器 引用地址:4412 PWM

上一篇:4412 按键和中断
下一篇:4412 RS485

推荐阅读最新更新时间:2024-11-17 00:18

基于DSP的PWM型开关电源的设计
摘要:介绍了基于DSP的PWM型开关电源的原理及设计方法,以DSP芯片TMS320LF2407产生SPWM为例阐述了开关电源中PWM波形的实现方法。仿具结果表明,基于DSP的开关电源具有稳定快、失真小、负载对系统影响小的特点。 关键词:数字信号处理 脉宽调制 正弦脉宽调 目前,开关电源以具有小型、轻量和高效的特点而被广泛应用于以电子计算机为主异的各种终端设备和通信设备中,是当今电子信息产业飞速发展不可缺少的一种电源方式。与之相应,在微电子技术发展的带动下,DSP芯片的发展日新月异,功能日益强大,性价比不断上升,开发手段不断改进,其处理速度比CPU快10~15倍,因此基于DSP芯片的开关电源可以说是天作之保,拥有着广阔的前景,可
[应用]
脉宽调制(PWM)设计及应用原理解析
  脉宽调制(或简称PWM)是一个简单的概念,有许多应用。我们来看一个方波。    波形有一定的频率。波形的频率和周期彼此相反,即频率= 1/周期,周期= 1/频率。1s的周期意味着1Hz的频率。0.1s的周期表示10Hz的频率,10s的周期表示0.1Hz的频率   请注意,该信号完全是数字信号,要么为开/高电平,要么为关/低电平。例如,这不同于正弦波,正弦波是模拟的,在整个波形中平滑过渡(参见我们关于模拟和数字信号的文章)。   还要注意的是,对于方波,信号在一半时间内是开启的,在一半时间内是关闭的。   波形的on部分称为占空比——它是信号供电/做功/工作的时间比例。对于方波,这是50%的时间,意味着信号有50%的
[嵌入式]
脉宽调制(<font color='red'>PWM</font>)设计及应用原理解析
一种基于PWM快速产生模拟电压的方法
1,概述   在电子和自动化技术的应用中,数字信号转换模拟控制信号输出是电子设计中常见的问题,然而许多单片机内部并没有集成数摸转换器(DAC)。当然市场上也有一些专用的D/A转换芯片,但这类芯片价格昂贵,并且需要多个处理器功能管脚来控制,这对一般的简单应用是不适合的。   所以在有些应用中,由单片机的PWM输出(或者通过定时器和软件一起来实现PWM输出),经过简单RC滤波电路实现DAC来得到模拟电压是一种比较好的选择。然后,这种方法的一个缺点就是电平转换时间过长,本文提出了一种新的方法来克服该问题。    2, RC滤波电路   图1是传统的RC滤波电路,PSoC通过GPIO口和RC滤波产生模拟电压      
[模拟电子]
PIC16F877A例程---PWM
// PWM波形输出实验 // 晶振:4MHz // CPU:PIC16F877A #include pic.h //调用头文件 __CONFIG(0x3F31); //芯片配置字 #define uchar unsigned char #define uint unsigned int uchar a; void CCP1INIT() ; void delayms(uint z); void keyscan(); void main(void) { CCP1INIT(); T2CON=0X04;
[单片机]
如何快速调试TLD6098-X的设计
TLD6098-2ES是宽电压输入双通道多拓扑DC/DC控制器,两个通道上的电流或者电压通过可以通过不同的拓扑实现闭环控制,作为一级恒压源或者恒流源。目前TLD6098可以支持的拓扑有:对地升压,SEPIC, 反激,对电池升压,降压。 本文针对TLD6098-X在保护诊断设计上的特殊处理,以及实际使用当中常见问题进行分析和解答,使设计者可以尽快定位问题,从而快速问题,缩短设计周期。 1、介绍 汽车的ECU设计从概念到验证是需要很多的步骤。通过测试原型机的PCB来验证设计是最重要并且最花时间的步骤之一。所有可能的输入变化量需要加在ECU的上并且需要仔细检查与之相关的输出。 在调试当中有可能会触发错误状态,测试工程师需要通过测量波形来
[汽车电子]
如何快速调试TLD6098-X的设计
蜂鸣器式通导率与线圈检查器电路图
蜂鸣器式通导率与线圈检查器电路图
[模拟电子]
<font color='red'>蜂鸣器</font>式通导率与线圈检查器电路图
iTOP-4412开发板-LinuxC-继电器模块的测试例程
平台:iTOP-4412开发板 实现:继电器模块测试例程 继电器的 C 的测试程序,C 测试程序可以在 Android系统,Qt 系统以及最小 linux 系统上运行,文档以 Android 系统上测试为例,提供的 c 测试源码为“relay.c”以及编译好的程序“relay”。继电器模块原理图,如下图所示。通过,控制网络 XispSPIMISO 的电平来实现继电器的开和关。精英版底板对应扩展端子 J38(端子丝印为“GPIO”,挨着音频接口的端子)的管脚 10,全能板底板对应展端子 J10(端子丝印为“GPIO”,挨着蜂鸣器和独立按键的端子)的管脚 10。 精英版硬件连接,如下图所示,使用排线连接开发板和继电器模块,连接
[单片机]
iTOP-<font color='red'>4412</font>开发板-LinuxC-继电器模块的测试例程
基于智能PWM控制的机车制动控制单元的设计
1 引 言 随着我国国民经济的蓬勃发展和人民生活水平的日益提高,铁路的客、货运量将越来越大,列车牵引重量与运行速度将不断提高。高速客运及重载货运列车的发展对列车制动系统提出了更高更新的要求。 国外发达国家都是采用微机应用先进控制理论实现对机车制动气缸的精确控制。而在我国机车上广泛使用的DK-l和JZ-7型制动机只能对机车实现一些简单的逻辑控制功能,不能实现对机车制动缸和均衡风缸的闭环控制,难以满足机车制动控制的需要。随着电子技术及微机控制技术应用的日渐成熟,有必要应用现代电子技术和先进的控制理论,利用微机的强大功能实现对机车的精确制动。 目前世界各国铁路绝大多数仍采用空气制动,要实现对气体压力的控制,特别是小流量压力控制,就应
[应用]

推荐帖子

LED芯片制造设备现状及其工艺介绍
Timson,如果您要查看本帖隐藏内容请回复LED芯片制造设备现状及其工艺介绍哟,,,看帖看来都要回啊看看vlook谢谢分享seee看看而已led回复楼主探路者的帖子很重要哦。。led学习学习顶顶吧,不然看不成!学习1111
探路者 LED专区
矩形波产生芯片或产生电路
要求:1.矩形波输出;2.输出电压7V以上3.输出频率可调,或者100Hz左右固定。4.外围电路尽量简单,只要几个电阻电容能起振就行,芯片封装要劲量小。因为电路大小要求指甲盖程度大小。5.最好两路输出,两路波形能有180°相位差。请有接触过相关电路的大侠不吝指教。谢谢了。矩形波产生芯片或产生电路74HC04加电阻电容恩搞定,谢谢回复沙发ssawee的帖子
hotguang 综合技术交流
遇到难题了
你看这是at89x51.hat89x51..h里的位定义sfrSCON=0x98;sfrSBUF=0x99;这么说来缓冲器的地址和SCON.1的地址重合了,这么可以重呢,这个寄存器还是占用8位的字节吗?若是,岂不是把SCON的全占用了scon是98H~9FH,真不清楚SBUF在何处安身的,迷糊,迷糊呀,斑竹/at89x51..h 遇到难题了,我觉得你犯了一个理解上的错误。不知道你有没有看过内存的存储图,下图是一张存储图,我们可以看出每个地址一直往下递增,
zzbeagle 综合技术交流
为什么地址总结长度是8的倍数,例如8位,16位,32位,64位这些都是8的位数?为什么一个字节要等于8个 比特??
为什么地址总结长度是8的倍数,例如8位,16位,32位,64位这些都是8的位数?为什么一个字节要等于8个比特??为什么地址总结长度是8的倍数,例如8位,16位,32位,64位这些都是8的位数?为什么一个字节要等于8个比特??如果计算机是你发明的,你就可以让他等于任何数,哈哈,只要是2的整数倍就可以了为什么呢?为什么要是2的倍数呢?为什么呢?为什么要是2的倍数呢?为什么呢?为什么要是2的倍数呢?D因为计算机只认识0和1这个是大多数人的习惯,事实上总线长度并不总是8的整数倍
meja 嵌入式系统
多传感器融合技术 拜托各位帮下忙
拜托各位大哥,传感器数据融合的有什么新的方法么?需要答辩创新。传统的神经网络都已经用烂了没有新意,答辩过不了。。。拜托各位大哥帮忙看下好么?多传感器融合技术拜托各位帮下忙滤波?:loveliness: ??不是啊就是数据融合的方法现在论文上神经网络不是都用了好几十年了么毕业有需要创新有没有什么新的融合算法之类的拜托目前也就神经网络加智能选取了
zhaozeyu123045 传感器
DC-DC升压电路,FB管脚电压有一个异常脉冲
如下图所示DC-DC升压电路,用数字电位器调节输出,FBX管脚处的网络RW和RH连接数字电位器的两个输出端。现在的问题是,在输出电压由高电压跳变成低电压瞬间,FBX管教处的电压跳变到4.75V(见下面示波器波形图),而正常的FBX电压为1.6V。导致数字电位器和MCU烧毁(数字电位器和MCU都是1.8V供电)。请问各位大佬,这个问题是什么原因导致的呢?怎么解决呢?谢谢!注:输出低电平到高电平瞬间,FBX的电压貌似也会跳变到2.2V。
xiaxingxing 电源技术
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved