欧美:瑞恩、AB、ABB、欧陆、西门子、伦茨、派克、法那科;
日本:安川、富士、三菱、山洋、东芝;
台湾:台达、东元;
国产:华中、广数、时光等
伺服驱动器有哪些特点:
1、伺服驱动器软件程序主要包括主程序、中断服务程序、数据交换程序。
2、伺服驱动器主程序主要用来完成系统的初始化、LO接口控制信号、DSP内各个控制模块寄存器的设置等。
3、伺服驱动器所有的初始化工作完成后,主程序才进入等待状态,以及等待中断的发生,以便电流环与速度环的调节。
4、中断服务程序主要包括四M定时中断程序光电编码器零脉冲捕获中断程序、功率驱动保护中断程序、通信中断程序。
5、伺服驱动器初始化主要包括DsP内核的初始化、电流环与速度环周期设定、PWM初始化、四M启动、ADc初始化与启动、QEP初始化、矢量与永磁同步电机转子的初始位置初始化、多次伺服电机相电流采样、求出相电流的零偏移量、电流与速度P调节初始化等。
6、PWM定时中断程序有的用来对霍尔电流传感器采样A、B两相电流ia、ib进行采样、定标,以及根据磁场定向控制原理,计算转子磁场定向角,再角,再生成PWM信号对位置环与速度环进行控制。
7、功率驱动保护中断程序主要用于检测智能功率模块的故障输出。
8、光电编码器零脉冲捕获中断程序可实现对编码器反馈零脉冲精确确地捕获,从而可以得到交流永磁同步电机矢量变换定向角度的修正值。
9、数据交换程序主要包括与上位机的通信程序、EEPRoM参的读取、数码管显示程序等。参数的存储控制器键盘值。
10、伺服驱动器软件主程序流程图。
用DS18B20做的电子温度计,非常简单。
#include <reg51h>
#include\"AscLedh\"
#include <intrinsh>
#include <stdioh>
//
#define Seck (500/TK) //1秒中的主程序的系数
#define OffLed (Seck560) //自动关机的时间5分钟!
//
#if (FHz==0)
#define NOP_2uS_nop_()
#else
#define NOP_2uS_nop_();_nop_()
#endif
//
#define SkipK 0xcc //跳过命令
#define ConvertK 0x44 //转化命令
#define RdDs18b20K 0xbe //读温度命令
//
extern LedOut(void);
//
sbit PNP1=P3^4;
sbit PNP2=P3^5;
sbit BEEP=P3^2;
//
#defineDQ PNP2 //原来的PNP2 BEEP
//
static unsigned char Power=0;
//
union{
unsigned char Temp[2]; //单字节温度
unsigned int Tt; //2字节温度
}T;
//
typedef struct{
unsigned char Flag; //正数标志 0;1==》负数
unsigned char WenDu; //温度整数
unsigned int WenDuDot; //温度小数放大了10000
}WENDU;
//
WENDU WenDu;
unsigned char LedBuf[3];
//----------------------------------
//功能:10us 级别延时
// n=1===> 6Mhz=14uS 12MHz=7uS
//----------------------------------
void Delay10us(unsigned char n){
do{
#if (FHz==1)
NOP_2uS;NOP_2uS;
#endif
}while(--n);
}
//-----------------------------------
//功能:写18B20
//-----------------------------------
void Write_18B20(unsigned char n){
unsigned char i;
for(i=0;i<8;i++){
DQ=0;
Delay10us(1);//延时13us 左右
DQ=n & 0x01;
n=n>>1;
Delay10us(5);//延时50us 以上
DQ=1;
}
}
//------------------------------------
//功能:读取18B20
//------------------------------------
unsigned char Read_18B20(void){
unsigned char i;
unsigned char temp;
for(i=0;i<8;i++){
temp=temp>>1;
DQ=0;
NOP_2uS;//延时1us
DQ=1;
NOP_2uS;NOP_2uS;//延时5us
if(DQ==0){
temp=temp&0x7F;
}else{
temp=temp|0x80;
}
Delay10us(5);//延时40us
DQ=1;
}
return temp;
}
//-----------------------------------
void Init (void){
DQ=0;
Delay10us(45);//延时500us
DQ=1;
Delay10us(9);//延时90us
if(DQ){ //0001 1111b=1f
Power =0; //失败0
}else{
Power++;
DQ=1;
}
}
//----------------------------------
void Skip(void){
Write_18B20(SkipK);
Power++;
}
//----------------------------------
void Convert (void){
Write_18B20(ConvertK);
Power++;
}
//______________________________________
void Get_Ds18b20L (void){
TTemp[1]=Read_18B20(); //读低位
Power++;
}
//______________________________________
void Get_Ds18b20H (void){
TTemp[0]=Read_18B20(); //读高位
Power++;
}
//------------------------------------
//规范化成浮点数
// sssss111;11110000
// sssss111;1111(05,025,0125,00625)
//------------------------------------
void ReadTemp (void){
unsigned char i;
unsigned intF1=0;
char j=1;
code int Code_F[]={6250,1250,2500,5000};
WenDuFlag=0;
if (TTemp[0] >0x80){ //负温度
TTt =~TTt+1; //取反+1=源吗 +符号S
WenDuFlag=-1;
}
TTt <<= 4; //左移4位
WenDuWenDu=TTemp[0]; // 温度整数
//
TTemp[1]>>=4;
//---------------------------
for (i=0;i<4;i++){ //计算小数位
F1 +=(TTemp[1] & 0x01)Code_F;
TTemp[1]>>=1;
}
WenDuWenDuDot=F1; //温度的小数
Power=0;
}
//----------------------------------
void Delay1S (void){
static unsigned int i=0;
if (++i==Seck) {i=0ower++;}
}
//----------------------------------
void ReadDo (void){
Write_18B20(RdDs18b20K);
Power++;
}
/
函数指针定义
/
code void (code SubTemp[])()={
Init,Skip,Convert,Delay1S,Init,Skip,ReadDo,Get_Ds18b20L,
Get_Ds18b20H,ReadTemp
};
//
void GetTemp(void){
(SubTemp[Power])();
}
//---------------------------------------------------
//将温度显示,小数点放大了10000
void GetBcd(void){
LedBuf[0]=WenDuWenDu / 10;
LedBuf[1]=WenDuWenDu % 10 +DotK;
LedBuf[2]=(WenDuWenDuDot/1000)%10;
if(LedBuf[0]==0)LedBuf[0]=Black;
if(WenDuFlag==0) return;
if(LedBuf[0] !=Black){
LedBuf[2]=LedBuf[1];
LedBuf[1]=LedBuf[0];
LedBuf[0]=Led_Pol; //'-'
}else{
LedBuf[0]=Led_Pol; //'-'
}
}
/
//---------------------------------------------------
void JbDelay (void){
static long i;
if (++i>=OffLed){
P1=0xff;
P2=0xff;
PCON=0x02;
}
}
/
/
主程序开始
1:2002_10_1 设计,采用DS18B20测量
2:采用函数数组读取DS18B20LED数码管显示正常!
3:改变FHz可以用6,12MHz工作!
/
code unsigned char Stop[3] _at_ 0x3b;
void main (void){
P1=0xff;
WenDuWenDu=0;
while (1){
GetTemp();
GetBcd();
// JbDelay();
LedOut();
}
}
复制代码
20091012_8b1ef92155560c13b5807ZmoDVSacjwD[1]jpg (12 KB)
2009-10-21 23:21 上传
下载次数:0
T1是允许蜂鸣器发声的时间,T2就是发声的间距了。设置好这两个参数后;
当安全距离引起的触发事件时,就周期性输出上述这个控制蜂鸣器的信号;
同时把T2与安全距离SL关联起来,如 T2=αSL,SL变小了,T2也就变小了,听起来声音就越急促了;
45Microcontrollers & Embedded Systems200212
新器件新技术 NEW PRODUCT & TECH
用EP7211实现传呼信息实时语音合成和播放
■ 郑州解放军信息工程大学 胡泽明 王鹏
摘 要
关键词
阐述在一款集成传呼功能的二合一PDA系统中,使用嵌入式处理器EP7211实现个人传呼信
息的实时语音合成和播放的功能,主要包括字符语音库的建立,字符语音合成算法和Codec
语音中断服务例程等3部分
PDA G729 语音库 语音合成
引 言
PDA(Personal Digital Assitant,个人数字助理)
是近年来继寻呼机和移动电话之后,在国内市场迅
速崛起的便携式电子产品就其扩展意义来讲,它
能够集成移动计算,电话和网络等多种功能根据
不同的应用需求,它可以管理个人信息,提供名片
存储和日程安排,也可以接收各种寻呼信息(如股
市,天气预报等)如果是集成通信模块,还可以
作为移动电话使用,进行无线网络互联广义的
PDA包括简单的电子记事本,电子辞典和功能强大
的掌上电脑,它们的主要区别表现在 *** 作系统,存
储能力,运算速度和数据交换能力等方面
目前国内传统PDA产品经过几年的高速发展
后,市场基本饱和,销售额出现负增长不过由于
PDA产品的灵活性,有针对性的行业应用作为一个
新亮点,开始为人们所关注经过行业应用改造后
的PDA产品,已经在国内市场大显身手文曲星
展现超强的语言翻译能力,比较适合于大学生和语
言翻译者使用;蓝火系列能实时接收股市信息和
专家点评,适合工薪阶层的炒股者国家信息产业
部已经鼓励PDA产品在交通,警务,保险等领域
的行业应用和推广
分析市场需求,我们研发了集成传呼功能的,
专门面向铁路交通行业应用的铁路交通信息系统
PDA本PDA系统除了具备传统PDA的个人名片
管理和辞典检索等功能外,同时提供交通行业应用
的民航航班查询,铁路列车时刻表查询等功能
本PDA的寻呼系统实现如下功能:能够通过寻
呼对列车时刻表,列车晚点信息,列车剩余票额,
股道信息等行业数据进行动态更新作为另一个特
色,当接收到个人寻呼时,能够将寻呼内容实时地
转换成语音并播放
下面重点介绍本PDA系统中使用嵌入式处理
器EP7211实现个人寻呼内容的实时语音转换和播
放该功能的实现包含前后相关的3个部分:字符
语音库的建立,字符的语音合成算法和Codec语音
中断服务例程
1实现条件和要求
PDA属于嵌入式应用系统,其同一般PC机有
很大差别硬件方面,嵌入式处理器基于RISC体
系结构,一般工作频率在几十MHz,甚至更低;系
统内存容量一般在几百KB~几MB之间;一般使用
容量小的ROM或者Flash作为硬盘来存储可执行程
序和数据软件方面,PDA系统一般有专用的嵌入
式 *** 作系统和软件开发调试移植环境
个人传呼信息的特点是单条传呼信息长度变化
较大,20~50个字符不等最为常见的是"请回电
话";传呼信息涉及到的字符数量较大,字符
语音合成时运算量大,单字符合成后语音数据占用
的存储空间多;需要事先建立字符语音库等
由于具体硬件环境的限制,传呼信息的特点和
语音合成的要求,该功能能够实现的前提有:语音
库占用的空间小;字符合成时速度要快;采用前台
进行字符语音合成时,以后台中断方式进行合成语
音的播放来保证其实时性和连续性
2具体实现
下面分别介绍字符语音库的建立,字符语音合成
算法,本PDA系统的框架结构和语音中断服务例程
21建立字符语音库
我们选用G729语音压缩编码标准来建立语音
库该标准采用的算法是共轭结构的代数码激励线
46200212
新器件新技术 NEW PRODUCT & TECH
性预测(CS-ACELP),是基于CELP(码激励线性预
测)编码模型的算法这种编码规范的严格性使性
能达到或超过了32 Kbps的G726 ADPCM编码,具
有很高的语音质量;同时,它是在语音信号8 KHz
取样的基础上得到16 bit线性PCM后进行编码的,
压缩后的数据速率仅为8 Kbps,具有相当于8:1的
高压缩率其算法延迟少于16 ms由于G729编解
码器能够实现很高的语音质量和很低的算法延时,
因此被广泛地应用
字符语音库是一个单字发音语音数据的集合,
各段数据之间相互独立,不具有相关性语音库包
含了国标一,二级字库中的所有6763个汉字,10个
阿拉伯数字和26个英文字符的标准普通话语音数
据每个汉字或字符发音时长为065 s,采用8 KHz
抽样频率,使用了G729A语音编码算法对上述的语
音数据进行压缩,压缩后的数据速率为8 Kbps,相
当于具有8:1的高压缩率在汉字中,同音字占了
相当大的比例,而在语音合成中对于同音字的处理
是没有区别的,故近7000个汉字,我们只存储1123
个不同的发音经过同音字处理和采用G729A标准
压缩字符语音数据,则最终建立的语音库文件大小
为729 950字节,完全符合本PDA系统的数据存储
要求;否则,语音库数据量太大,本PDA系统不
能接受!
建立一个语音压缩数据库的具体步骤如下:
◇ 将数字和常用汉字的标准发音独立地录入到
数据文件中,作为基础数据使用cooledit2000软
件完成语音的录入
◇ 对于输入数据,按照每帧10 ms(80个样点)
的长度,将A_law语音通过简单换算变成16 bit PCM
数据,作为编码算法的输入
◇ 按照G729A算法标准,对数据进行编码
◇ 将编码后的数据转换为二进制比特流,写
入语音库文件中压缩后数据速率为8 Kbps,具有
相当于8:1的高压缩率
用C语言实现这一过程的程序流程如图1所示
字符语音库的建立是在Windows平台及Visual
C++编程环境下实现的,最终压缩处理后数据量的
大小为729 950字节,每个字符语音数据的大小是
650字节
22语音合成
当收到个人传呼信息时,语音合成程序首先从
指定位置获取传呼信息数据,然后在语音库中查找
每个汉字,阿拉伯数字或者英文字符的发音,重组
一个数据文件解码程序对该文件进行解码并且输
出原始语音语音合成流程如图2所示
语音合成过程首先是当前字符在语音库的定
位对于10个阿拉伯数字和26个英文字符,将其
放在语音库开头这些字符的查找比较方便汉字
是2字节存储,我们依据其区位码来作为语音库中
的定位索引字符语音库检索结束后的语音压缩数
头文件,全局变量,函数原型的说明
输入语音文件及压缩后的码文件名
初始化编码器,包括滤波器状态的初始
化及语音,激励等缓冲区的初始化
语音文件是否结束
读1帧语音(80点)(A_Law)
转换成16bit线性PCM
将参数码字转成串行码
流,再转成码字codeword
写文件
结束
编码主函数Coder_ld8a()
Y
N
图1 字符语音库的建立流程图
查找语音库,将寻呼文字信
息替换为压缩语音文件
解码器初始化
码文件是否结束
读取1帧数据,并
转换成二进制码流
解码主函数
输出数据变为A_LAW信号
语音播放
结束
Y
N
图2 语音合成流程图
47Microcontrollers & Embedded Systems200212
新器件新技术 NEW PRODUCT & TECH
据作为该字符解码过程的输入
数据解码过程可以分为参数解码和重构信号后
处理2部分首先要从输入的数据中提取参数符
号,对这些符号解码之后,可以获得相应于10 ms
话音帧的编码器参数这些参数包括线性预测系
数,自适应码本矢量,固定码本矢量以及它们的增
益解码之后的参数用来计算重建语音信号得到
重构语音信号只有通过后处理过程来对该信号进行
放大,包括后向滤波,高通滤波以及按比例因子扩
大,最后得到原始的语音数据
字符解码器原理如图3所示
23PDA系统的体系结构
PDA系统的硬件体系结构如图4所示
PDA系统中嵌入式处理器EP7211进行数据处
理,传呼解码芯片接收传呼信息并进行解码, LCD
提供数据输出显示,触摸屏提供用户输入接口,
Flash用来存储应用程序和数据,SRAM为程序运行
提供内存空间,电源电路为嵌入式处理器和外围设
备提供所需要的工作电压
嵌入式处理器EP7211是Cirrus Logic公司专门为
低成本,超低功耗的嵌入式应用设计的,包含
ARM7TDMI处理器内核和丰富的外围接口外围接
口有CODEC音频接口,SPI串行A/D接口,单色LCD
接口,DRAM接口,红外接口,2个PWM接口,实
时时钟RTC以及电源检测接口EP7211的内核电路
工作在25 V,而外围电路工作在33 V;可根据具
体情况对内核的
时钟进行动态编
程控制,可工作
在18,36,49和74
MHz另外EP7211
还有3种基本供
电模式:正常 ***
作(operating),
空闲(idle)和等
待(standby)在
等待模式,主时
钟被关断,整个
CPU及相关外围
(除中断和RTC)
也关断,但可通
过中断或按钮来
唤醒
系统软件开发平台采用了我们自主开发研制
的,专门面向嵌入式应用系统开发的XGW平台
XGW开发平台采用消息驱动机制,是C语言开发
它功能强大,模块化设计,扩展性强,产品升级容
易,总体框架如图5所示
图5全面反应了XGW开发平台的体系结构,包
括事件消息驱动机制,内存管理,字符和图形显示
输出,图形组件库等图形组件库中的编辑框,列
表框,按钮等为用户应用程序开发提供了系统应用
编程接口API不过,XGW平台对于系统硬件的中
断响应没有提供统一的入口和出口,需要开发人员
单独处理XGW开发平台的消息分为鼠标消息,键
盘消息和定时器消息等3类
24语音中断服务例程
嵌入式处理器EP7211本身提供的外设语音录放
Codec(coder/decoder)芯片可以实现语音的录入和
适应码
向量解码
增益解码
固定码
向量解码
结构激励
MA码增
益预测
11
,GBGA
22
,GBGA
)(nv
间隔延时
p
g^
^
c
g^
11
,CS
22
,CS
)(zP
)(nc
编码序号
LP综合
滤波器
)(nu
后滤波器
)(^ns
高通上标定
)(nfs
LSP解码内插值)(^zALSF
LSP序号
3210
,,,LLLL
每帧
每子帧
210
,,PPP
图3 字符解码原理框图
天线
LCD
触摸屏
时钟,复
位,唤醒射频输入
FlashSRAM电源管理
串行口
红外口
传呼解
码芯片嵌入式
处理器
EP7211
收音设备
语音录放电路
图4 硬件结构
48200212
新器件新技术 NEW PRODUCT & TECH
播放功能该模块提供2个独立的16字节长的数据
发送和接收缓冲区(FIFO),其为全双工模式,数
据收发速率是64 kbps芯片自身提供工作时钟,定
时脉冲以及数据的串/并和并/串转换功能编程
人员通过设置EP7211相应的控制寄存器使能这些项
功能,则每当数据收发缓冲区半慢或者半空时(8
字节),芯片自身就会产生一次中断信号供外部处
理理论计算芯片中断速率是1 ms/次
语音播放中断服务例程主要完成的工作是,当
产生语音中断时,仍然有数据需要播放,则向语音
数据发送缓冲区FIFO中写入指定数据,剩下的工
作由Codec芯片本身来完成中断服务例程ISR的
伪代码如下(因为具体实现代码没有通用性,故此
处用伪码描述):
void IRQ_Codec_Handler(void)
{
while(检测系统状态寄存器,发现语音芯片数据发送缓
冲区FIFO非满)
{
if(已经播放过的语音数据长度 = 给定的需要播
放的语音数据长度) //结束
{
禁止数据发送缓冲区中断;
复位各相关的全局变量;
程序返回;
}
}
else
{
向语音芯片发送数据缓冲区FIFO写入默认数据
系统调用
通用开
发控件字符输出图形输出
内存管理用户自
定义控件
事件消息驱动
硬件中断
执行
ISR
中断返回
硬件中断
执行
ISR
中断返回
用户级应用程序
图5 XGW平台的软件体系结构
0XFF;
}
}
}3试验结果和分析
由于在设计阶段充分考虑过语音合成算法的
大运算量和系统的实时性要求,故我们在具体实
现的时候也采取了一些措施,比较突出的有:用
ARM汇编语言来实现关键性的函数代码;语音合
成时提高处理器EP7211的工作频率(处理器正常
工作频率是18 MHz);对于一些常用的三角函数计
算,采用查表的方式等来加快程序执行速度在
PDA样机测试中,单字符合成时间在650 ms左右,
基本上能够满足实际应用需求数据语音库经过
处理之后,占用了729 560字节也能够满足本PDA
系统的存储要求
当PDA系统收到1条个人传呼信息时,在语音
库的支持下,立刻启动语音合成算法,逐个进行字
符语音合成当第1个字符语音合成结束后,立刻
启动语音中断服务例程进行语音播放这样收到的
个人传呼信息,在前台逐个字符解码时,其后台语
音播放也在进行根据实际测试参数,基本上满足
了系统的实时性要求
从一定角度看,单字符650 ms的语音合成时间
基本能够满足实际应用需要,但还是希望能够进一
步减小这个值这由于我们对ARM处理器的使用
还处在研究阶段ARM本身提供了16位的Thumb
指令集和32位的ARM指令集,而且两者在某些方
面表现出较大差别一般来讲,Thumb代码长度是
ARM代码长度的65%,而执行效率要比后者高出
60%但在某些方面,32位的ARM指令集也会表
现出其优于16位Thumb指令集的强大功能;同时
该处理器系统支持ARM指令集和Thumb指令集混
合编程模式随着对二者差别和各自优势的深入理
解,结合本系统的硬件体系结构,采用有效的指令
集混合编程模式将会使程序执行效率进一步提高,
从而使实时性得到进一步加强
参考文献
1Cirrus Logic公司 EP7211数据手册
2马忠梅 ARM嵌入式处理器结构与应用基
础 北京:北京航空航天大学出版社,2002
3Gibson Jerry D,等 多媒体数字压缩原理与
标准 李煜晖等译 北京:电子工业出版社,2000
以上就是关于空调制冷原理是什么 全部的内容,包括:空调制冷原理是什么 、求看下我翻译的一段话有无语法问题、伺服驱动器有哪些品牌等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)