应广单片机pwm - CSDN
精华内容
参与话题
  • 应广PMS154C(1)--11位PWM输出

    千次阅读 2020-06-12 15:15:42
    应广PMS154C--11位PWM输出概述PMS171B之PWM配置PWM计算与配置11位PWM输出完整代码演示效果最后 概述 作者在以前已经讲解完PMS171B端口输出高低电平,PWM输出,在所用的PMS154C芯片有个为11位PWM输出,就写个11位PWM...

    概述

    作者在以前已经讲解完PMS171B端口输出高低电平,PWM输出,在所用的PMS154C芯片有个为11位PWM输出,就写个11位PWM例程,方便大家快速上手。
    这里选用8PIN的单片机进行开发,引脚如下图所示,选取7号管脚进行开发。

    • 若使用PA5输出PWM,需要上拉电阻。

      在这里插入图片描述
      在这里插入图片描述

    PMS171B之PWM配置

    在这里插入图片描述
    pwmg0c寄存器是配置PWMG0控制,所以需要开启OWMG0,同时输出到PA0,时钟选择IHRC,故配置如下:

    	pwmg0c = 0b_1000_011_1;
    

    在这里插入图片描述
    pwmg0s寄存器是配置PWMG0分频。
    在这里插入图片描述
    上述寄存器为计数寄存器和占空比寄存器。

    PWM计算与配置

    在这里插入图片描述
    在本文中我们设置输出为38kHz,三分之一占空比的PWM载波,根据上图公式,F为16M,需要输出PWM 为38kHz,故:
    38k = 16M÷[P * (K+1) * CB]
    求得[P * (K+1) * CB]需要等于421,设置P分频为1,即pwms[6:5]=00,设置K为4,即pwms[4:0]=0100,所以CB为84,即Counter_Bount[10:1]=00 0101 0100,代码配置如下:

    /*b7@0=PWMG0 中断模式
    	b6:5@0=PWMG0 预分频 
    			00:÷1  
    			01:÷4
    			10:÷16
    			11:÷64
    	b4:0@0100=PWMG0 分频。*/
    		pwmg0s = 0b_0_00_00100;
    /***********计数器寄存器******************/
    //PWMG0  计数上限高位寄存器,PWMG0 上限寄存器。位[10:3]。
    		pwmg0cubh = 0b_0001_0101;
    //PWMG0  计数上限低位寄存器
    /*b7:6@00=PWMG0 上限寄存器。位[2:1]。
    	b5:0@00000=保留*/
    		pwmg0cubl = 0b_0000_0000;
    

    在这里插入图片描述
    由上图可知,计时器Counter_Bount[10:0] = {pwmgxcubh[7:0], 所以Counter_Bount[10:0] = 000 1010 1000,转化为十进制为168。
    占空比可通过修改Duty[10:0]来改变,Duty_Bound[10:0] = {pwmgxdth[7:0],pwmgxdtl[7:5]} ,如果需要设置三分之一的占空比,即168/3=56,所以Duty[10:0] = 000 0011 1000,pwmgxdth[7:0]配置为0000 0111,pwmgxdtl[7:5]配置为000,如下:

    /***********占空比寄存器******************/
    //PWMG0  占空比低位寄存器
    /*b7:5@000=PWMG0 上限寄存器。位[2:1]。
    	b5:0@00000=保留*/
    		pwmg0dtl = 0b_0000_0000;
    //PWMG0  占空比高位寄存器。位[10:3]。
    		pwmg0dth = 0b_0000_0111;
    

    11位PWM输出完整代码

    #include	"extern.h"
    void	FPPA0 (void)
    {
    	.ADJUST_IC	SYSCLK=IHRC/4		//	SYSCLK=IHRC/4
    	clkmd.En_WatchDog	=	1;		//	WatchDog Enable
    /*b7@1=启用 PWMG0。0/1:停用/启用
    	b6@0=PWMG0 生成器输出状态。
    	b5@0=选择 PWMG0 的输出的结果是否反极性。
    	b4@0=PWMG0 计数器清零。
    	b3:1@ 011=选择 PWMG0 输出引脚:011 PA0
    	b0@1=PWMG0 时钟源。0: CLK*2,1:IHRC*2*/
    		pwmg0c = 0b_1000_011_1;
    /*b7@0=PWMG0 中断模式
    	b6:5@0=PWMG0 预分频 
    			00:÷1  
    			01:÷4
    			10:÷16
    			11:÷64
    	b4:0@0100=PWMG0 分频。*/
    		pwmg0s = 0b_0_00_00100;
    /***********计数器寄存器******************/
    //PWMG0  计数上限高位寄存器,PWMG0 上限寄存器。位[10:3]。
    		pwmg0cubh = 0b_0001_0101;
    //PWMG0  计数上限低位寄存器
    /*b7:6@00=PWMG0 上限寄存器。位[2:1]。
    	b5:0@00000=保留*/
    		pwmg0cubl = 0b_0000_0000;
    
    /***********占空比寄存器******************/
    //PWMG0  占空比低位寄存器
    /*b7:5@000=PWMG0 上限寄存器。位[2:1]。
    	b5:0@00000=保留*/
    		pwmg0dtl = 0b_0000_0000;
    //PWMG0  占空比高位寄存器。位[10:3]。
    		pwmg0dth = 0b_0000_0111;
    
    	while (1)
    	{
    		wdreset;
    .delay 2000*10;
    	}
    }
    

    演示效果

    如下图所示,频率为37.6kHz,占空比为33.83%,配置成功。
    在这里插入图片描述

    最后

    关注微信公众号『记贴』,持续更新文章和学习资料,可加作者的微信交流学习!
    在这里插入图片描述

    展开全文
  • 应广单片机PMC150程序解析,工程新建及代码的实现方法,单路PWM输出
  • 应广单片机adc和pwm例程

    千次阅读 2020-03-20 23:01:36
    应广单片机Otp单核系列主要有以下几个系列,15x系列为纯iO,13x系列为带12bit的adc,17x系列为带8bit的adc,现在我用pms132B写个adc/pwm例程,方便大家快速上手.不多说,上代码. #include "extern.h" /**********adc***...

             应广单片机Otp单核系列主要有以下几个系列,15x系列为纯iO,13x系列为带12bit的adc,17x系列为带8bit的adc,现在我用pms132B写个adc/pwm例程,方便大家快速上手.不多说,上代码.

    #include    "extern.h"


    /**********adc*****************/
    Word usAdcSum;
    Word usAdcSumBak;

    BIT        THR             :PB.0;
    BIT        PWM             :PA.3;
    /*定时器初始化*/
    void PwmTmr2Init ( void )
    {
        tm2ct = 0x0;/*计数值*/
        //pwm duty
        tm2b = 0;//START_PWM_CNT;
        //8 位 pwm, 预分频 = 64, 分频 = 2, frq=970hz
        tm2s = 0b0_11_00000;
        //0010=HIRC输出 ,01= PB2,10=PA3,11=PB4, PWM模式,禁用极性反转
        tm2c = 0b0010_10_1_0;
    }

    void GetAdc(void)    //ADC采样处理
    {
         BYTE  ucCnt;
         
         $ ADCC Enable, THR    ;
         
         //8次采样做平均/
         ucCnt=8;
         //初始化
         usAdcSum=0;
         while ( ucCnt-- )
         {
             AD_Start=1;
            .wait1    AD_Done;
            //adc 采样值,12bit实际使用8bit
            usAdcSum +=ADCRH;
         }    
         //取平均值输出
         usAdcSum=usAdcSum>>3;  //temp除以8
    }


    void    FPPA0 (void)
    {
        .ADJUST_IC    SYSCLK=IHRC/2        //    SYSCLK=IHRC/2

        //    Insert Initial Code
        $ THR  in;
        $ PWM  out,low;


        /*bit config start
        b7:5@001=2V参考;000=VDD;
        b4@0f通道选择器
        b3:2@f通道band-gap参考电压选择
        b1:0@00=rsv
        bit config end*/
        adcrgc=0b000_0_00_00;

        
        PwmTmr2Init();
        while (1)
        {
            /**/
            GetAdc();
            /*当pwm占空比为0,会有关不断的现象,要做特殊处理*/
            if(usAdcSumBak!=usAdcSum)
            {
                usAdcSumBak=usAdcSum;

               /*更新占空比*/
                tm2b=usAdcSum$0;

               /*pwm输出为0*/
                if(!usAdcSum$0)
                {

                   /*关闭pwm输出*/
                    tm2c = 0b0010_00_1_0;
                    PWM=0;
                } 
                else
                {

                   /*打开pwm输出*/
                    tm2c = 0b0010_10_1_0;
                }
            }

        }
    }


    void    Interrupt (void)
    {
        pushaf;

        if (Intrq.T16)
        {    //    T16 Trig
            //    User can add code
            Intrq.T16    =    0;
            //...
        }

        popaf;
    }

    /*有啥问题可以留言,也可以联系本人QQ85547259*/

    展开全文
  • 单片机出现的历史并不长,但发展十分迅猛。 它的产生与发展和微处理器(CPU)的产生与发展大体同步,自1971年美国英特尔公司首先推出4位微处理器以来,它的发展到目前为止大致可分为5个阶段。下面以英特尔公司的...

    单片机出现的历史并不长,但发展十分迅猛。 它的产生与发展和微处理器(CPU)的产生与发展大体同步,自1971年美国英特尔公司首先推出4位微处理器以来,它的发展到目前为止大致可分为5个阶段。下面以英特尔公司的单片机发展为代表加以介绍。

    1971年~1976年

    单片机发展的初级阶段。 1971年11月英特尔公司首先设计出集成度为2000只晶体管/片的4位微处理器英特尔4004,并配有RAM、 ROM和移位寄存器, 构成了第一台MCS—4微处理器, 而后又推出了8位微处理器英特尔8008, 以及其它各公司相继推出的8位微处理器。

    1976年~1980年

    低性能单片机阶段。 以1976年英特尔公司推出的MCS—48系列为代表, 采用将8位CPU、 8位并行I/O接口、8位定时/计数器、RAM和ROM等集成于一块半导体芯片上的单片结构, 虽然其寻址范围有限(不大于4 KB), 也没有串行I/O, RAM、 ROM容量小, 中断系统也较简单, 但功能可满足一般工业控制和智能化仪器、仪表等的需要。

    1980年~1983年

    高性能单片机阶段。 这一阶段推出的高性能8位单片机普遍带有串行口,有多级中断处理系统, 多个16位定时器/计数器。片内RAM、 ROM的容量加大,且寻址范围可达64 KB,个别片内还带有A/D转换接口。

    1983年~80年代末

    16位单片机阶段。 1983年英特尔公司又推出了高性能的16位单片机MCS-96系列,由于其采用了最新的制造工艺, 使芯片集成度高达12万只晶体管/片。

    1990年代

    单片机在集成度、功能、速度、可靠性、应用领域等全方位向更高水平发展。

    单片机的分类及应用

    MCU按其存储器类型可分为无片内ROM型和带片内ROM型两种。对于无片内ROM型的芯片,必须外接EPROM才能应用(典型为8031);带片内ROM型的芯片又分为片内EPROM型(典型芯片为87C51)、MASK片内掩模ROM型(典型芯片为8051)、片内Flash型(典型芯片为89C51)等类型。

    按用途可分为通用型和专用型;根据数据总线的宽度和一次可处理的数据字节长度可分为8、16、32位MCU。

    目前,国内MCU应用市场最广泛的是消费电子领域,其次是工业领域、和汽车电子市场。消费电子包括家用电器、电视、游戏机和音视频系统等。工业领域包括智能家居、自动化、医疗应用及新能源生成与分配等。汽车领域包括汽车动力总成和安全控制系统等。

    单片机的基本功能

    对于绝大多数MCU,下列功能是最普遍也是最基本的,针对不同的MCU,其描述的方式可能会有区别,但本质上是基本相同的:

    TImer(定时器):TImer的种类虽然比较多,但可归纳为两大类:一类是固定时间间隔的TImer,即其定时的时间是由系统设定的,用户程序不可控制,系统只提供几种固定的时间间隔给用户程序进行选择,如32Hz,16Hz,8Hz等,此类TImer在4位MCU中比较常见,因此可以用来实现时钟、计时等相关的功能。

    另一类则是Programmable Timer(可编程定时器),顾名思义,该类Timer的定时时间是可以由用户的程序来控制的,控制的方式包括:时钟源的选择、分频数(Prescale)选择及预制数的设定等,有的MCU三者都同时具备,而有的则可能是其中的一种或两种。此类Timer应用非常灵活,实际的使用也千变万化,其中最常见的一种应用就是用其实现PWM输出。

    由于时钟源可以自由选择,因此,此类Timer一般均与Event Counter(事件计数器)合在一起。

    IO口:任何MCU都具有一定数量的IO口,没有IO口,MCU就失去了与外部沟通的渠道。根据IO口的可配置情况,可以分为如下几种类型:

    纯输入或纯输出口:此类IO口有MCU硬件设计决定,只能是输入或输出,不可用软件来进行实时的设定。

    直接读写IO口:如MCS-51的IO口就属于此类IO口。当执行读IO口指令时,就是输入口;当执行写IO口指令则自动为输出口。

    程序编程设定输入输出方向的:此类IO口的输入或输出由程序根据实际的需要来进行设定,应用比较灵活,可以实现一些总线级的应用,如I2C总线,各种LCD、LED Driver的控制总线等。

    对于IO口的使用,重要的一点必须牢记的是:对于输入口,必须有明确的电平信号,确保不能浮空(可以通过增加上拉或下拉电阻来实现);而对于输出口,其输出的状态电平必须考虑其外部的连接情况,应保证在Standby或静态状态下不存在拉电流或灌电流。

    外部中断:外部中断也是绝大多数MCU所具有的基本功能,一般用于信号的实时触发,数据采样和状态的检测,中断的方式由上升沿、下降沿触发和电平触发几种。外部中断一般通过输入口来实现,若为IO口,则只有设为输入时其中断功能才会开启;若为输出口,则外部中断功能将自动关闭(ATMEL的ATiny系列存在一些例外,输出口时也能触发中断功能)。外部中断的应用如下:

    外部触发信号的检测:一种是基于实时性的要求,比如可控硅的控制,突发性信号的检测等,而另一种情况则是省电的需要。

    信号频率的测量,为了保证信号不被遗漏,外部中断是最理想的选择。

    数据的解码:在遥控应用领域,为了降低设计的成本,经常需要采用软件的方式来对各种编码数据进行解码,如Manchester和PWM编码的解码。

    按键的检测和系统的唤醒:对于进入Sleep状态的MCU,一般需要通过外部中断来进行唤醒,最基本的形式则是按键,通过按键的动作来产生电平的变化。

    通讯接口:MCU所提供的通讯接口一般包括SPI接口,UART,I2C接口等,其分别描述如下:

    SPI接口:此类接口是绝大多数MCU都提供的一种最基本通讯方式,其数据传输采用同步时钟来控制,信号包括:SDI(串行数据输入)、SDO(串行数据输出)、SCLK(串行时钟)及Ready信号;有些情况下则可能没有Ready信号;此类接口可以工作在Master方式或Slave方式下,通俗说法就是看谁提供时钟信号,提供时钟的一方为Master,相反的一方则为Slaver。

    UART(Universal Asynchronous Receive Transmit):属于最基本的一种异步传输接口,其信号线只有Rx和Tx两条,基本的数据格式为:Start Bit + Data Bit(7-bits/8-bits) + Parity Bit(Even, Odd or None) + Stop Bit(1~2Bit)。一位数据所占的时间称为Baud Rate(波特率)。

    对于大多数的MCU来讲,数据为的长度、数据校验方式(奇校验、偶校验或无校验)、停止位(Stop Bit)的长度及Baud Rate是可以通过程序编程进行灵活设定。此类接口最常用的方式就是与PC机的串口进行数据通讯。

    I2C接口:I2C是由Philips开发的一种数据传输协议,同样采用2根信号来实现:SDAT(串行数据输入输出)和SCLK(串行时钟)。其最大的好处是可以在此总线上挂接多个设备,通过地址来进行识别和访问;I2C总线的一个最大的好处就是非常方便用软件通过IO口来实现,其传输的数据速率完全由SCLK来控制,可快可慢,不像UART接口,有严格的速率要求。

    Watchdog(看门狗定时器):Watchdog也是绝大多数MCU的一种基本配置(一些4位MCU可能没有此功能),大多数的MCU的Watchdog只能允许程序对其进行复位而不能对其关闭(有的是在程序烧入时来设定的,如Microchip PIC系列MCU),而有的MCU则是通过特定的方式来决定其是否打开,如Samsung的KS57系列,只要程序访问了Watchdog寄存器,就自动开启且不能再被关闭。一般而言watchdog的复位时间是可以程序来设定的。Watchdog的最基本的应用是为MCU因为意外的故障而导致死机提供了一种自我恢复的能力。

    单片机的学习窍门

    任何一款MCU,其基本原理和功能都是大同小异,所不同的只是其外围功能模块的配置及数量、指令系统等。

    对于指令系统,虽然形式上看似千差万别,但实际上只是符号的不同,其所代表的含义、所要完成的功能和寻址方式基本上是类似的。

    要了解一款MCU,首先需要知道就是其ROM空间、RAM空间、IO口数量、定时器数量和定时方式、所提供的外围功能模块(Peripheral Circuit)、中断源、工作电压及功耗等等。

    了解这些MCU Features后,接下来第一步就是将所选MCU的功能与实际项目开发的要求的功能进行对比,明确哪些资源是目前所需要的,哪些是本项目所用不到的。

    对于项目中需要用到的而所选MCU不提供的功能,则需要认真理解MCU的相关资料,以求用间接的方法来实现,例如,所开发的项目需要与PC机COM口进行通讯,而所选的MCU不提供UART口,则可以考虑用外部中断的方式来实现。

    对于项目开发需要用到的资源,则需要对其Manua*进行认真的理解和阅读,而对于不需要的功能模块则可以忽略或浏览即可。对于MCU学习来讲,应用才是关键,也是最主要的目的。

    明确了MCU的相关功能后,接下来就可以开始编程了。

    对于初学者或初次使用此款MCU的设计者来说,可能会遇到很多对MCU的功能描述不明确的地方,对于此类问题,可以通过两种方法来解决,一种是编写特别的验证程序来理解资料所述的功能;另一种则可以暂时忽略,单片机程序设计中则按照自己目前的理解来编写,留到调试时去修改和完善。前一种方法适用于时间较宽松的项目和初学者,而后一种方法则适合于具有一定单片机开发经验的人或项目进度较紧迫的情况。

    指令系统千万不要特别花时间去理解。指令系统只是一种逻辑描述的符号,只有在编程时根据自己的逻辑和程序的逻辑要求来查看相关的指令即可,而且随着编程的进行,对指令系统也会越来越熟练,甚至可以不自觉地记忆下来。

    单片机的程序编写

    MCU的程序的编写与PC下的程序的编写存在很大的区别,虽然现在基于C的MCU开发工具越来越流行,但对于一个高效的程序代码和喜欢使用汇编的设计者来讲,汇编语言仍然是最简洁、最有效的编程语言。

    对于MCU的程序编写,其基本的框架可以说是大体一致的,一般分为初始化部分(这是MCU程序设计与PC最大的不同),主程序循环体和中断处理程序三大部分,其分别说明如下:

    初始化:对于所有的MCU程序的设计来讲,出世化是最基本也是最重要的一步,一般包括如下内容:

    屏蔽所有中断并初始化堆栈指针:初始化部分一般不希望有任何中断发生。

    清除系统的RAM区域和显示Memory:虽然有时可能没有完全的必要,但从可靠性及一致性的角度出发,特别是对于防止意外的错误,还是建议养成良好的编程习惯。

    IO口的初始化:根据项目的应用的要求,设定相关IO口的输入输出方式,对与输入口,需要设定其上拉或下拉电阻;对于输出口,则必须设定其出世的电平输出,以防出现不必要的错误。

    中断的设置:对于所有项目需要用到的中断源,应该给予开启并设定中断的触发条件,而对于不使用的多余的中断,则必须给予关闭。

    其他功能模块的初始化:对于所有需要用到的MCU的外围功能模块,必须按项目的应用的要求进行相应的设置,如UART的通讯,需要设定Baud Rate,数据长度,校验方式和Stop Bit的长度等,而对于Programmer Timer,则必须设置其时钟源,分频数及Reload Data等。

    参数的出世化:完成了MCU的硬件和资源的出世化后,接下来就是对程序中使用到的一些变量和数据的初始化设置,这一部分的初始化需要根据具体的项目及程序的总体安排来设计。对于一些用EEPROM来保存项目预制数的应用来讲,建议在初始化时将相关的数据拷贝到MCU的RAM,以提高程序对数据的访问速度,同时降低系统的功耗(原则上,访问外部EEPROM都会增加电源的功耗)。

    主程序循环体:大多数MCU是属于长时间不间断运行的,因此其主程序体基本上都是以循环的方式来设计,对于存在多种工作模式的应用来讲,则可能存在多个循环体,相互之间通过状态标志来进行转换。对于主程序体,一般情况下主要安排如下的模块:

    计算程序:计算程序一般比较耗时,因此坚决反对放在任何中断中处理,特别是乘除法运算。

    显示传输程序:主要针对存在外部LED、LCD Driver的应用。

    中断处理程序:中断程序主要用于处理实时性要求较高的任务和事件,如,外部突发性信号的检测,按键的检测和处理,定时计数,LED显示扫描等。

    一般情况下,中断程序应尽可能保证代码的简洁和短小,对于不需要实时去处理的功能,可以在中断中设置触发的标志,然后由主程序来执行具体的事务――这一点非常重要,特别是对于低功耗、低速的MCU来讲,必须保证所有中断的及时响应。

    对于不同任务体的安排,不同的MCU其处理的方法也有所不同。

    例如,对于低速、低功耗的MCU(Fosc=32768Hz)应用,考虑到此类项目均为手持式设备和采用普通的LCD显示,对按键的反应和显示的反应要求实时性较高,应此一般采用定时中断的方式来处理按键的动作和数据的显示;而对于高速的MCU,如Fosc》1MHz的应用,由于此时MCU有足够的时间来执行主程序循环体,因此可以只在相应的中断中设置各种触发标志,并将所有的任务放在主程序体中来执行。

    在MCU的程序设计中,还需要特别注意的一点就是:要防止在中断和主程序体中同时访问或设置同一个变量或数据的情况。有效的预防方法是,将此类数据的处理安排在一个模块中,通过判断触发标志来决定是否执行该数据的相关操作;而在其他的程序体中(主要是中断),对需要进行该数据的处理的地方只设置触发的标志。――这可以保证数据的执行是可预知和唯一的。

    全球主流单片机制造商

    欧美地区

    1、Freescale+NXP(飞思卡尔+恩智浦):荷兰,主要提供16位、32位MCU。应用范围:汽车电子、LED和普通照明、医疗保健、多媒体融合、家电和电动工具、楼宇自动化技术电机控制、电源和功率转换器、能源和智能电网、自动化、计算机与通信基础设施。

    2、Microchip+Atmel(微芯科技+爱特梅尔):美国,主要提供16位、32位MCU。应用范围:汽车电子、工业用、电机控制、汽车、楼宇自动化、家用电器、家庭娱乐、工业自动化、照明、物联网、智能能源、移动电子设备、计算机外设。

    3、Cypress+Spansion(赛普拉斯+飞索半导体):美国,主要提供8位、16位、32位MCU。应用范围:汽车电子、家用电器、医疗、消费类电子、通信与电信、工业、无线。

    4、ADI(亚德诺半导体):美国,主要提供8位、16位、32位MCU。应用范围:航空航天与国防、汽车应用 、楼宇技术 、通信 、消费电子 、能源 、医疗保健 、仪器仪表和测量 、电机、工业自动化 、安防。

    5、Infineon(英飞凌):德国,主要提供16位、32位MCU。应用范围:汽车电子、消费电子、工程、商用和农用车辆、数据处理、电动交通、工业应用、医疗设备、移动设备、电机控制与驱动、电源、面向摩托车电动自行车与小型电动车、智能电网、照明、太阳能系统解决方案、风能系统解决方案。

    6、ST Microelectronics(意法半导体):意大利/法国,主要提供32位MCU。应用范围:LED和普通照明、交通运输、医疗保健、多媒体融合、家电和电动工具、楼宇自动化技术电机控制、电源和功率转换器、能源和智能电网、自动化、计算机与通信基础设施。

    7、Qualcomm(高通):美国,主要提供16位,32位MCU。应用范围:智能手机、平板电脑、无线调制解调器。

    8、Texas Instruments(德州仪器):美国,主要提供16位、32位MCU。应用范围:汽车电子、消费电子、医疗设备、移动设备、通信。

    9、Maxim(美信):美国,主要提供32位MCU。应用范围:汽车电子、消费电子、工业应用、安防。

    日韩地区

    1、Renesas(瑞萨):日本,主要提供16位、32位MCU。应用范围:电脑及外设、消费类电子、健康医疗电子、汽车电子、工业、通信。

    2、Toshiba(东芝):日本,主要提供16位、32位MCU。应用范围:汽车电子、工业用、电机控制、无线通信、移动电话、电脑与周边设备、影像及音视频、消费类(家电)、LED照明、安全、电源管理、娱乐设备。

    3、Fujitsu(富士通):日本,主要提供32位MCU。应用范围:汽车、医疗、机械,家电。

    4、Samsung Electronics(三星电子):韩国,主要提供16位、32位MCU。应用范围:汽车电子、工业用、电机控制、汽车、楼宇自动化、家用电器、家庭娱乐、工业自动化、照明、物联网、智能能源、移动电子设备、计算机外设。

    台湾地区

    1、宏晶科技:台湾,主要提供32位MCU。应用范围:通信、工业控制、信息家电、语音。

    2、盛群半导体:台湾,主要提供8位、32位MCU。应用范围:消费电子、LED照明等。

    3、凌阳科技:台湾,主要提供8位、16位MCU。应用范围:家庭影音。

    4、中颖电子:台湾,主要提供4位、8位MCU。应用范围:充电器、移动电源、家电、工业控制。

    5、松翰科技:台湾,主要提供8位、32位MCU。应用范围:摇控器、智能型充电器、大小系统、电子秤、耳温枪、血压计、胎压计、各类量测及健康器材。

    6、华邦电子:台湾,主要提供8位、16位MCU。应用范围:车用电子、工业电子、网络、计算机、消费电子、物联网。

    7、十速科技:台湾,主要提供4位、8位、51位MCU。应用范围:遥控器、小家电。

    8、佑华微电子:台湾,主要提供4位、8位MCU。应用范围:录音集成电路产品、消费电子、家用产品。

    9、应广科技单片机:台湾,主要提供4位、8位MCU。应用范围:机械、自动化、家电、机器人。

    10、义隆电子:台湾,主要提供8位、16位MCU。应用范围:消费电子、电脑、智能手机。

    大陆地区

    1、希格玛微电子:主要提供32位MCU,应用范围:电信、制造、能源、交通、电力等。

    2、珠海欧比特:主要提供32位MCU,应用范围:航空航天:星箭站船、飞行器;高端工控:嵌入式计算机;舰船控制、工业控制、电力设备、环境监控。

    3、兆易创新:主要提供32位MCU,应用范围:工业自动化、人机界面、电机控制、安防监控、智能家居、物联网。

    4、晟矽微电子:主要提供8位、32位MCU,应用范围:小家电、消费类电子、遥控器、鼠标、锂电池、数码产品、汽车电子、医疗仪器及计量、玩具、工业控制、智能家居及安防等领域。

    5、芯海科技:主要提供16、32位MCU,应用范围:仪器仪表、物联网、消费电子、家电、汽车电子。

    6、联华集成电路:主要提供8位、16位MCU,应用范围:消费电子、白色家电、工业控制、通信设备、汽车电子、计算机。

    7、珠海建荣:主要提供8位MCU,应用范围:家用电器 、移动电源。

    8、炬芯科技:主要提供8位至32位MCU,应用范围:平板电脑、智能家居、多媒体、蓝牙、wifi音频。

    9、爱思科微电子:主要提供8位、16位MCU,应用范围:消费类芯片、通讯类芯片、信息类芯片、家电。

    10、华芯微电子:主要提供8位、4位MCU,应用范围:卫星接收器、手机充电器、万年历、多合一遥控器。

    11、上海贝岭(华大半导体控股):主要提供8位、16位、32位MCU,应用范围:计算机周边、HDTV、电源管理、小家电、数字家电。

    12、海尔集成电路:主要提供14位、15位、16位MCU,应用范围:消费电子、汽车电子、工业、智能仪表。

    13、北京君正:主要提供32位MCU,应用范围:可穿戴式设备、物联网、智能家电、汽车、费类电子、平板电脑。

    14、中微半导体:主要提供8位MCU,应用范围:智能家电、汽车电子、安防监控、LED照明及景观、智能玩具、智能家居、消费类电子。

    15、神州龙芯集成电路:主要提供32位MCU,应用范围:电力监控、智能电网、工业数字控制、物联网、智能家居、数据监控。

    16、紫光微电子:主要提供8位、16位MCU,应用范围:智能家电。

    17、时代民芯:主要提供32位MCU,应用范围:汽车导航、交通监控、渔船监管、电力电信网络。

    18、华润矽科微电子(华润微旗下公司):主要提供8位、16位MCU,应用范围:消费电子、工业控制、家电。

    19、国芯科技:主要提供32位MCU,应用范围:信息安全领域 、办公自动化领域、通讯网络领域、 信息安全领域。

    20、中天微:主要提供32位MCU,应用范围:智能手机、数字电视、机顶盒、汽车电子、GPS、电子阅读器、打印机。

    21、华润微电子:主要提供8位、16位MCU,应用范围:家电,消费类电子、工业自动化控制的通用控制电路。

    22、中颖电子:主要提供4位、8位、16位、32位MCU,应用范围:家电、电机。

    23、灵动微电子:主要提供32位,应用范围:电机控制、蓝牙控制、高清显示、无线充、无人机、微型打印机、智能标签、电子烟、LED点阵屏等。

    24、新唐科技:主要提供8位MCU,应用范围:照明、物联网等。

    25、东软载波:主要提供8位、32位MCU,应用范围:家电、智能家居、仪器仪表、液晶面板控制器、工业控制等。

    26、贝特莱:主要提供32位MCU,应用范围:智能家居、工业控制以及消费类产品领域。

    27、笙泉科技:主要提供8位MCU,应用范围:车用、教育、工控、医疗等中小型显示面板。

    28、航顺芯片:主要提供8位、32位MCU,应用范围:汽车、物联网等。

    29、复旦微电子:主要提供16位、32位MCU,应用范围:智能电表、智能门锁等。

    30、华大半导体:主要提供8位、16位、32位MCU,应用范围:工业控制、智能制造、智慧生活及物联网等。

    有喜欢单片机嵌入式的大佬和大学生可以加我企鹅哦:3290323464

    更多视频资料http://www.makeru.com.cn/live/1758_1146.html?s=143793

    展开全文
  • 应广PMS171B(2)--PWM输出

    千次阅读 2020-06-04 15:28:20
    应广PMS171B--2PWM输出概述PMS171B之PWM配置PWM计算与配置PWM输出完整代码演示效果最后 概述 作者在上期已经讲解完端口输出高低电平,这章建立实例来讲解PWM输出,在所用的芯片有个为PWM输出,就写个PWM例程,方便...

    概述

    作者在上期已经讲解完端口输出高低电平,这章建立实例来讲解PWM输出,在所用的芯片有个为PWM输出,就写个PWM例程,方便大家快速上手。
    这里选用8PIN的单片机进行开发,引脚如下图所示,PWM引脚为5。
    PMS171B-S08

    PMS171B之PWM配置

    在这里插入图片描述
    tm2b寄存器是用来配置PWM的占空比的,0-7位代表数值为0-255。
    在这里插入图片描述
    tm2s寄存器是用来配置PWM的分频,7位代表PWM分辨率,6-5为预分频器,4-0位为Timer时钟分配器。
    在这里插入图片描述
    tm2c寄存器是Timer2控制寄存器,如果需要输出PWM,3-2位应该设置为10让Timer选择PA3,1位设置为1选择为PWM模式。

    PWM计算与配置

    在这里插入图片描述
    在本文中我们设置输出为1K,30%占空比的PWM,根据上图公式,Y=tm2[7:4],我们选择CLK(系统时钟),即0001。

    /*单片机内部RC震动时钟为 IHRC默认为16M,因此,IHRC/4=4M,系统时钟为4M*/
    	.ADJUST_IC	SYSCLK=IHRC/4, IHRC=16MHz, VDD=5V;
    

    在上篇配置IO口中,我们已经如上图代码所示,设置时钟为4M,所以Y=4M。
    此时我们设置预分频器为16,即tm2s[6:5]设置为10,根据:输出频率=Y÷[256S1(S2+1)]可以得知S2配置为0;输出频率=4M÷[25616(0+1)]=976Hz。tm2s配置如下所示:

    tm2s=0b0_10_00000; //  8-bit PWM ,预分频=16,分频 = 0
    

    设置30%占空比则为tm2b=255*30%=77,tm2b如下所示:

    tm2b = 0x4d;//占空比 30%4d 50%7f 70%b4
    

    设置完之后需要打开PWM模式,tm2c设置如下所示:

    tm2c = 0b0001_10_1_0; // 系统时钟,输出 =PA3,PWM 模式
    

    PWM输出完整代码

    ​#include	"extern.h"//是程序的头文件。
    BIT   PWM     :PA.3;  //端口定义
    void	FPPA0 (void)//相当于程序的 main() 函数。
    {
     /*单片机内部RC震动时钟为 IHRC默认为16M,因此,IHRC/4=4M,系统时钟为4M*/
    	.ADJUST_IC	SYSCLK=IHRC/4, IHRC=16MHz, VDD=5V;
    /*********PWM*********************/
    tm2ct = 0x0; 
    tm2b = 0x4d;//占空比 30%4d 50%7f 70%b4
    //S1= tm2s[6:5] : 预分频器设定值(1, 4, 16, 64)
    //S2 = tm2s[4:0] : 分频器值(十进制,0 ~ 31)
    //输出频率 =4MHz÷ (   256 *   S1 (16) * (S2+1)1)  =  976Hz
    tm2s = 0b0_10_00000; //  8-bit PWM ,预分频 = 16 ,分频 = 0
    tm2c = 0b0001_10_1_0;  //  系统时钟,输出 =PA3 , PWM 模式
    	while (1)
    	{
    		.delay 4000*500;
    	}
    }
    

    演示效果

    在这里插入图片描述

    最后

    关注微信公众号『记贴』,持续更新文章和学习资料,可加作者的微信交流学习!
    在这里插入图片描述

    展开全文
  • 应广单片机开发案例

    千次阅读 2020-10-18 11:45:10
    应广单片机价格美丽,性价比高,mini-c好用,适用于消费电子开发。但是案例demo太少了,为了方便大家能够快速入门。这里贴出了一份经典PMS150C的点灯程序代码。不是Hello world!那种,是偏向于实际产品的那种。 ...
  • 应广单片机有两种硬件pwm,一种是8bit,另外一种是11bit,8bit的配置稍微简单一些.现在以pms133/psm134为例子,贴一个11bit pwm配置的例子.修改一下可以应用于广其他系列的单片机中.要注意的是pms152的11bit pwm无法...
  • 稍作修改就可以用在pms152,pms132B灯应广其他系列的单片机中.不多说,上代码.一切尽在代码中. #include "extern.h" /*定时时间是否到了cinit*/ bit FLAG_NMS; /*计数值cinit*/ byte count; /*定时器初始化cinit*...
  • 应广带12位ADC单片机

    千次阅读 2018-11-18 10:00:25
    PWM 存储空间 PMS131 有 有 有 无 12位 有 2k PMS132 有 有 有 无 12位 有 2k PMS133 有 有 有 有 12位 有 3k...
  • //功能:通过PWM调制模拟呼吸灯 //名称:呼吸灯 #include<reg52.h> //调用含有51专用寄存器的头文件;c51(用于单片机开发的一种c语言) #define uchar unsigned char //用uchar代替unsigned char #define ...
  • 1.本设计采用STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机作为主控制器 · 2.采用霍尔传感器非接触式测电机转速 · 3.LCD1602液晶显示当前的转速,转速单位为转/分(RPM)。和显示当前的pwm占空比0~...
  • 应广PMS171B--5看门狗&&按键输入&&切换档位概述PMS171B配置之看门狗寄存器配置管脚输入完整代码演示效果最后 概述 看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个...
  • 文章目录
  • 关于MCS-51单片机实现PWM的方法

    千次阅读 2016-01-25 11:27:10
    PWM 是“脉冲宽度调制”的意思。...PWM 的应用很广,简单的说,它可以控制灯光的亮度、可以控制直流电机的转速,甚至还可以输出语音信号。新型的单片机,往往都含有硬件的 PWM 模块,编写程序就很简单;而老式的MCS-51
  • 随着电子技术的深入发展,各种智能仪器越来越多,涉及领域越来越广,而仪器对电源的要求也越来越高。现今,电源设备有朝着数字...本文介绍一种基于AVR单片机PWM功能的低成本高精度数控恒流源,能够精确实现0~2A恒流。
  • 随着电子技术的深入发展,各种智能仪器越来越多,涉及领域越来越广,而仪器对电源的...本文介绍一种基于AVR单片机PWM功能的低成本高精度数控恒流源,能够精确实现0~2A恒流。系统框图 图1为系统的总体框图。本系统通...
  • 8 位 位 OTP 型单片机带 8 位 位 ADC数据手册 1.5KW OTP 程序存储器  96 字节数据存储器  时钟源:内部高频 RC 振荡器, 内部低频 RC 振荡器和外部晶体震荡  Band-gap 电路提供 1.2V 参考电压  一个硬件 16 ...
  • PWM在工业领域应用很广,是实现D/A转换和精确脉冲序列输出的有效手段。许多单片机都设置了PWM输出功能。XEP100单片机PWM模块具有如下特点: (1) XEP100单片机具有8个可编程的PWM通道,与单片机的PP0—PP7管脚...
  • PWM

    千次阅读 2012-09-24 17:11:01
    脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。...
  • PWM技术

    千次阅读 2011-02-25 12:27:00
    PWM技术
1 2 3 4 5 ... 18
收藏数 355
精华内容 142
热门标签
关键字:

应广单片机pwm