占位符

  1 #include <msp430.h>
  2 #include "sys.h"
  3 #include "ps2.h"
  4 #include "12864.h"
  5 #include "adc.h"
  6 #include "tlv5638.h"
  7 #include "pid.h"
  8 #include "timera.h"
  9 #include "uart.h"
 10 #include "vosc.h"
 11
 12 //#define _DISMAIN_
 13
 14 #define ADCN 10        // ad采集次数
 15
 16 // 在ps2.c里面定义
 17 extern unsigned char ps2_keyvalue;
 18 extern unsigned char ps2_flag;
 19
 20 unsigned int m = 1300;            // TLV5638设置值
 21 unsigned char adcnt = 0;
 22 unsigned int adcFinish = 0;
 23 unsigned int adcValue = 0, advArr[ADCN] = { 0 };    // ADC采集的值,采集13次保存在数组里
 24 unsigned int ta_flag = 0, dispFlag = 0;
 25
 26 // pid参数
 27 unsigned int point = 1200;        // 目标值
 28 float p = 0.1, i = 0, d = 0.1;
 29 int inc = 0, tempInc;                    // 增量
 30 unsigned int out2Osc[10] = { 0 };
 31
 32 // 获取键盘输入
 33 void GetInput()
 34 {
 35     unsigned char temp;
 36     temp = PS2_AsiiConvert(ps2_keyvalue);
 37
 38     if(temp == '+')
 39     {
 40         point += 100;
 41         if(point >= 2000)
 42             point = 2000;
 43         IncPIDSetPoint(point);        //
 44         LCD_Set_Pos(0, 4);
 45         LCD_Show_Num(point);
 46     }
 47     else if(temp == '-')
 48     {
 49         point -= 100;
 50         if(point < 11)
 51             point = 10;
 52         IncPIDSetPoint(point);
 53         LCD_Set_Pos(0, 4);
 54         LCD_Show_Num(point);
 55     }
 56     else if(temp == '7')        //p设置
 57     {
 58         p += 0.01;
 59         IncPIDSet(p, i, d);
 60         LCD_Set_Pos(3, 0);
 61         LCD_Show_Deci2(p);
 62     }
 63     else if(temp == '1')
 64     {
 65         p -= 0.01;
 66         IncPIDSet(p, i, d);
 67         LCD_Set_Pos(3, 0);
 68         LCD_Show_Deci2(p);
 69     }
 70     else if(temp == '8')
 71     {
 72         i += 0.01;
 73         IncPIDSet(p, i, d);
 74         LCD_Set_Pos(3, 3);
 75         LCD_Show_Deci2(i);
 76     }
 77     else if(temp == '2')
 78     {
 79         i -= 0.01;
 80         IncPIDSet(p, i, d);
 81         LCD_Set_Pos(3, 3);
 82         LCD_Show_Deci2(i);
 83     }
 84     else if(temp == '9')
 85     {
 86         d += 0.01;
 87         IncPIDSet(p, i, d);
 88         LCD_Set_Pos(3, 6);
 89         LCD_Show_Deci2(d);
 90     }
 91     else if(temp == '3')
 92     {
 93         d -= 0.01;
 94         IncPIDSet(p, i, d);
 95         LCD_Set_Pos(3, 6);
 96         LCD_Show_Deci2(d);
 97     }
 98     else
 99     {
100     }
101     P2IFG &= ~BIT4;
102 }
103
104 /*
105  * 加权滤波
106  */
107 unsigned int filter(unsigned int arr[])
108 {
109     unsigned char i;
110
111     /* 均值滤波 */
112     unsigned int temp = 0;
113
114     for (i = 0; i < ADCN; i++)
115     {
116         temp += arr[i];
117     }
118     temp = (unsigned int) (temp * 1.0 / ADCN);
119
120     return temp;
121 }
122
123 /*
124  * AGC自动调节
125  */
126 void AGC()
127 {
128     // 测试用
129 //    P1OUT |= BIT6;
130
131     adcValue = (unsigned long) (filter(advArr) * 2500.0f / 1024.0f);// * 1000.0f );    // / 1024.0f);
132     // 计算增量
133     inc = IncPIDCalc(adcValue);
134     tempInc += inc;                        // 增量调节
135     if(tempInc < 0)
136         tempInc = 0;                    // 输出限制>=0V
137     if(tempInc > 2000)
138         tempInc = 2000;                    // 输出限制<=2V
139     m = (unsigned int) tempInc;
140
141     // 设置TLV值
142     TLV_WriteData(0xd002);                // 写入通道A
143     TLV_WriteData(Volt(m));
144
145     // 输出到虚拟示波器
146     out2Osc[0] = point;
147     out2Osc[1] = (unsigned int) adcValue;
148     out2Osc[2] = m;
149     out2Osc[3] = 0;
150     VOSC_Out4Data(out2Osc);
151
152 //    P1OUT &= ~BIT6;
153 }
154
155 #ifndef _DISMAIN_
156 void main()
157 {
158     // 测试用
159     P1DIR |= BIT6;
160     P1OUT |= BIT6;
161 //    P2DIR |= BIT5;
162 //    P2OUT |= BIT5;
163
164     System_Init();
165     LCD_Init();
166     PS2_Init();
167     TLV_Init();                        // TLV5638控制电压
168     ADC_Init2();                    // P1.310次采集
169     __delay_cycles(10000);
170     TA_Init();                        // 定时器初始化,10ms
171     Uart_Init();                    // OSC用到串口
172
173     // PID初始化
174     IncPIDInit(p, i, d, point);
175
176     // UI
177     LCD_Clear();
178     LCD_Set_Pos(0, 0);
179     LCD_Show_String("PointV->");            // 目标值
180     LCD_Set_Pos(0, 4);
181     LCD_Show_Num(point);
182     LCD_Set_Pos(0, 7);
183     LCD_Show_String("mV");
184     LCD_Set_Pos(1, 0);
185     LCD_Show_String("CurSet->");            // 当前设定值
186     LCD_Set_Pos(1, 4);
187     LCD_Show_Num(m);
188     LCD_Set_Pos(1, 7);
189     LCD_Show_String("mV");
190     LCD_Set_Pos(2, 0);
191     LCD_Show_String("ADCapV->");            // 采集电压
192     LCD_Set_Pos(2, 4);
193     LCD_Show_Num(adcValue);
194     LCD_Set_Pos(2, 7);
195     LCD_Show_String("mV");
196
197     // 显示pid参数
198     LCD_Set_Pos(3, 0);
199     LCD_Show_Deci2(p);
200     LCD_Set_Pos(3, 3);
201     LCD_Show_Deci2(i);
202     LCD_Set_Pos(3, 6);
203     LCD_Show_Deci2(d);
204
205     // 写入初始电压
206     TLV_WriteData(0xd002);
207     TLV_WriteData(Volt(m));
208     LCD_Set_Pos(1, 4);
209     LCD_Show_Num(m);
210
211     // agc初始化
212     tempInc = m;
213
214     _EINT();            // 使能中断,键盘、定时器
215     while (1)
216     {
217         // 键盘
218         if(ps2_flag == 1)
219         {
220             GetInput();        // 获取按键,处理按键事件
221             ps2_flag = 0;
222         }
223
224         // ADC采集
225 //        if(ta_flag == 1)
226 //        {
227 //            ta_flag = 0;
228 //
229 //            // AD采集
230 //            ADC_Start2(advArr);
231 //        }
232
233         // AGC调节
234 //        if(adcFinish == 1)            // 采集了N次
235 //        {
236 //            adcFinish = 0;
237 //            AGC();
238 //        }
239
240 //        // 设置TLV值
241 //        TLV_WriteData(0xd002);                // 写入通道A
242 //        TLV_WriteData(Volt(m));
243
244         // 显示延时
245         if (dispFlag >= 150)
246         {
247             dispFlag = 0;
248
249             // 显示当前设定值
250             LCD_Set_Pos(1, 4);
251             LCD_Show_Num(m);
252
253             // 显示AD采集结果
254             LCD_Set_Pos(2, 4);
255             LCD_Show_Num(adcValue);
256         }
257     }
258 }
259
260 #pragma vector=TIMER0_A0_VECTOR
261 __interrupt void TIME0_A0_ISR(void)
262 {
263     ta_flag = 1;            // 定时时间到
264     dispFlag++;                // 用于显示延时
265
266 //    P2OUT |= BIT5;            // 准备AGC
267     ADC_Start2(advArr);        // AD采集
268
269 //    _EINT();
270
271     // 测试用
272     P1OUT ^= BIT6;
273 }
274
275 #pragma vector = ADC10_VECTOR
276 __interrupt void ADC10ISR(void)
277 {
278 //    adcFinish = 1;
279
280     ADC10CTL0 &= ~(ENC + ADC10SC);    // 停止转换
281     AGC();                            // 采集完成,AGC调节
282 //    P2OUT &= ~BIT5;
283
284 //    adcFinish = 0;
285 }
286
287 #endif

转载于:https://www.cnblogs.com/rongfangliu/p/ampMain.html

MSP430之自动增益程控放大main备份相关推荐

  1. msp430 abs函数 c语言,实现一个简单的msp430软件

    以做一个简单的采集设备为例.假定已经准备好硬件设备,现在我们开始在MCU上搭建运行的软件. 使用的软件为iar ew430 5.10b,仿真器是杭州利尔达的USB型MSP430仿真器LSD-FET43 ...

  2. 基于LTC1068的程控滤波器

    一 项目功能介绍 该装置包括放大器增益可调和滤波器工作模式及工作频率可调.此装置可广泛应用于信号处理.仪器仪表和工业控制等方面.以下为详细功能介绍: (1)放大器输入正弦信号电压峰峰值为20mV,电压 ...

  3. 基于STM32单片机和Android的便携式数字示波器设计

    目 录 1 绪论 1 1.1 示波器概述 1 1.2 数字示波器的特点及原理 1 1.3 数字示波器国内外研究状况 2 1.4 Android概述 3 1.5 题目研究背景及意义 4 2 数字示波器原 ...

  4. 基于DAC0832的程控衰减器

    基于DAC0832的程控衰减器 文章目录 基于DAC0832的程控衰减器 一.需求分析: 二.主要元器件: 三.设计流程 四.工作原理 4.1完整原理图 4.2仿真环境 4.3基准源 2.56V 4. ...

  5. 频率响应函数与数字滤波实验_WKD3419振动测试与控制教学实验系统

    一.概述: WKD3419型振动测试与控制系统是一套集成化的振动测试系统,通过参考实验指导书可以做近几十个振动方面的实验,包括振动基本参数频率.振幅的测试:基本物理量位移.速度.加速度的测试:单自由度 ...

  6. 关于21年电赛,这些一定要熟悉!

    ▼点击下方名片,关注公众号▼ 知识点概要 仪器仪表:小信号放大.滤波器.程控放大.频率相位测量.锁相频率合成.峰值检波测量.功率放大.A/D,D/A,FFT等. 通信高频:振荡.混频.调制解调(AM. ...

  7. Chrome运行时性能瓶颈分析

    一,初探,根据现象发现问题 chrome的performance知道很久了,但总是没有特别权威且跟上时代的学习资料,这次痛定思痛,直接看英文文档,一点点把这块啃掉,本笔记基于Chrome 59 ste ...

  8. 高性能 MySQL实战

    概览 内容来自于周彦伟的<高性能MySQL实战>,课程有 10 个课时,本人对其内容进行了梳理.消化并形成笔记. 1. 高性能 MySQL 基础篇 1.1 体系结构 Client Conn ...

  9. 计算机测试ppt,计算机测试重点.ppt

    机械工程测试技术-- 计算机测试技术(5);内容 ;重点 ;1.概述 ;1.概述 ;组成硬件 信号调理:隔离.放大.滤波数据采集:采集板/卡/器 模拟开关.采样保持.AD转换计算机:PC.IPC.CP ...

  10. 电赛中常用的模块电路设计

    关注v-x-公-众-号:[嵌入式基地] 后-台-回-复:[电赛] 即可获资料 回复[编程]即可获取 包括有:C.C++.C#.JAVA.Python.JavaScript.PHP.数据库.微信小程序. ...

最新文章

  1. 集成显卡+独立显卡实现三屏显示
  2. 【数据平台】python语言NLP库Gensim初识
  3. C宏定义中的##,#,#@用法介绍
  4. oracle数据库存储过程中NO_DATA_FOUND不起作用解决
  5. iOS底层探索(二) - 写给小白看的Clang编译过程原理
  6. 【CSS3动画】transform对文字及图片的旋转、缩放、倾斜和移动
  7. Linux创建文件【命令】
  8. 2017华南理工华为杯H bx值(容斥问题)
  9. JAVA_HOME is not defined Ubuntu中设置JAVA_HOME路径
  10. 普歌-码上鸿鹄团队:在Nuxt(vue)渲染模板中使用mock.js随机生成数据
  11. Mapping Spiking Neural Networks的论文汇总以及思考
  12. 局域网内共享打印机的几种方式
  13. Vue+ .netcore3.1 模拟QQ邮箱发送验证码
  14. Oracle计算时间差
  15. 区块链数据服务 - BDS
  16. 服务器系统的监测,服务器监测系统
  17. 21个免费的UI界面设计工具、资源及网站
  18. 配置vsftpd 服务器
  19. 福利视频:一大波妹子助阵TFC,快来猜猜猜!
  20. 【水滴石穿】mobx-todos

热门文章

  1. The Stanford Geostatistical Modeling Software(地质统计软件)
  2. 对分类型变量,进行编码处理——pd.get_dummies()、LabelEncoder()、oneHotEncoder()
  3. iframe 实现网页本页显示
  4. 使用 IntelliJ IDEA打包Spark应用程序
  5. Python3-笔记-E-012-库-JSON
  6. kotlin-2(IdeaIU-2018.2汉化破解)
  7. Spring整合JMS——三种connectionFactory
  8. SQL反模式学习笔记15 分组
  9. 更多编译器对C++11的支持比较
  10. MSP430学习笔记10-ADC采集1602显示