久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6645|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

2015年電賽STM32程序 電流電壓采集

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:511461 發(fā)表于 2019-7-23 09:49 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
用了外設(shè)的LCD以及迷你版自帶的LCD兩種方案,以下是外設(shè)的程序

單片機(jī)源程序如下:

  1. #include "stm32f10x.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "adc.h"
  5. #include "timer.h"
  6. #include "stdio.h"
  7. #include "key.h"
  8. #include "lcd.h"
  9. #include "usart.h"        
  10. #include "led.h"
  11. #include "dac.h"
  12. #include "pid.h"

  13. /* Private variables ---------------------------------------------------------*/
  14. extern __IO uint32_t ADC_DualConvertedValueTab[10][4];
  15. extern float b;


  16. float V[50] = {0},I[50] = {0},t[50] = {0},m[50] = {0};
  17. float Vaver,Iaver,temp ,Iaver1, Iaver2,Vaver2;
  18. float K = 800;
  19. u8 g_ADCflag = 0;
  20. u16 g_adc = 0;
  21. signed g_fbase = 30;
  22. u8 Iflag = 1;
  23. u32 a=0;
  24. u8 keyvalue=0;
  25. float Vsum = 0,Isum = 0,tsum = 0,msum = 0;
  26. float Vmin = 3.3,Imin = 0,tmin = 0,mmin = 0;
  27. float Vmax = 0,Imax = 0,tmax=0,mmax = 0;
  28. u16  dacval=2160;
  29. float dianya;
  30. u16 j = 0;
  31. u16 adcx;
  32. u8  string[]={"    "};
  33. u8  string1[]={"    "};
  34. u8  string2[]={"    "};        
  35. u8  string3[]={"    "};
  36. u8  string4[]={"    "};
  37. u8  string5[]={"    "};

  38. void NVIC_Configuration(void)
  39. {
  40.                 NVIC_InitTypeDef NVIC_InitStructure;
  41.         
  42.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);        //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
  43.         
  44.                 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;          //定時(shí)器2優(yōu)先級最高
  45.                 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  46.                 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;        
  47.                 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  48.                 NVIC_Init(&NVIC_InitStructure);        
  49. }
  50. float ADaverage(u8 N)
  51. {
  52.                 float sum=0;
  53.                 u8 i= 0;
  54.                 for(i=0;i<10;i++)
  55.                 {
  56.                         sum = sum + (float)(ADC_DualConvertedValueTab[i][N]/4096.0 * 3.3);
  57.                 }
  58.                 return (sum/10.0);
  59. }

  60. int main(void)
  61. {                        
  62.                         delay_init();            //延時(shí)函數(shù)初始化         
  63.                         uart_init(9600);                 //串口初始化為9600        
  64.       Lcd_Init();                        //初始化OLED         
  65.       LED_Init();        
  66.              KEY_Init();                //按鍵初始化                                 
  67.                         ADCs_Init();      //初始化ADC        
  68.                         Timer_Init();  //20ms定時(shí)器
  69.                         NVIC_Configuration();          //設(shè)置NVIC中斷分組        
  70.                         Dac1_Init();
  71.       PIDInit ();
  72.       PIDInit2 ();        
  73.       LCD_Clear(WHITE);
  74.             BACK_COLOR=WHITE;
  75.       DAC_SetChannel1Data(DAC_Align_12b_R, 2160);//????0                                
  76.             while(1)
  77.                         {                                
  78.                                         LCD_ShowString(8,0,"pid:",RED);        
  79.                                         LCD_ShowString(8,20,"temp:",RED);        
  80.                                         LCD_ShowString(8,40,"Vaver:",RED);
  81.                                         LCD_ShowString(8,60,"Iaver:",RED);        
  82.                                         LCD_ShowString(8,80,"DAC:",RED);        
  83.                                         LCD_ShowString(8,100,"dianya:",RED);
  84.                                         LCD_ShowString(8,120,"Vaver2:",RED);        

  85.                                         keyvalue = KEY_Scan(0);//讀取按鍵值                                
  86.                                         if(keyvalue ==KEY0_PRES)//設(shè)定電壓減1Hz  B5
  87.                                         {
  88.                                                  b=b-0.005;
  89.                                         }                        
  90.                                         else if(keyvalue ==KEY1_PRES)//設(shè)定電壓減1Hz  B3
  91.                                         {
  92.                                                 if(dacval>65)   dacval=dacval-65;
  93.             DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//??DAC?               
  94.                                         }
  95.                                    else if(keyvalue ==WKUP_PRES)//設(shè)定電壓減1Hz  B3
  96.                                         {
  97.                                                 if(dacval<4092)   dacval=dacval+65;
  98.             DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//??DAC?        
  99.                                         }        
  100.                                         sprintf((char*)string, "%.3f", b);        //顯示電壓值
  101.                                         LCD_ShowString(74,0,string,RED);        
  102.                                          
  103.                                         adcx=DAC_GetDataOutputValue(DAC_Channel_1);//??????DAC??
  104.                                         LCD_ShowNum(74,80,adcx,4,RED);
  105.                                         dianya=(float)adcx*(3.3/4096);                        //得到DAC電壓值
  106.                                         sprintf((char*)string3, "%.3f", dianya);        //顯示電壓值
  107.                                         LCD_ShowString(74,100,string3,RED);        
  108.                                        
  109.                                         if(g_ADCflag==1)//采集到50個(gè)電壓電流值進(jìn)行處理
  110.                                         {        
  111.                                                                 Vsum = 0;Vmin = 3.3;Vmax = 0;
  112.                                                                 Isum = 0;Imin = 3.3;Imax = 0;
  113.                 tsum = 0;tmin = 3.3;tmax = 0;
  114.                 msum = 0;mmin = 3.3;mmax = 0;                                                        
  115.                                                                 for(j=0;j<50;j++)
  116.                                                                 {
  117.                                                                         Vsum = Vsum + V[j];
  118.                                                                         if(V[j] < Vmin)        Vmin = V[j];
  119.                                                                         if(V[j] > Vmax)        Vmax = V[j];

  120.                                                                         Isum = Isum + I[j];
  121.                                                                         if(I[j] < Imin)        Imin = I[j];
  122.                                                                         if(I[j] > Imax)        Imax = I[j];
  123.                                                                         
  124.                                                                         tsum = tsum + t[j];
  125.                                                                         if(t[j] < tmin)        tmin = t[j];
  126.                                                                         if(t[j] > tmax)        tmax = t[j];
  127.                                                                         
  128.                                                                         msum = msum + m[j];
  129.                                                                         if(m[j] < mmin)        mmin = m[j];
  130.                                                                         if(m[j] > mmax)        mmax = m[j];
  131.                                                                 }               
  132.                                                                 Vaver =(Vsum - Vmin - Vmax)/48;//去最大值最小值后平均
  133.                                                                 Iaver =(Isum - Imin - Imax)/48;//去最大值最小值后平均
  134.                                                                 temp =(tsum - tmin - tmax)/48;//去最大值最小值后平均
  135.                                                                 Vaver2 =(msum - mmin - mmax)/48;//去最大值最小值后平均
  136.                                                                
  137.                                                                 Iaver1= Iaver * 0.913;
  138.                                                                 Iaver2=Iaver1 - 0.6317;
  139.                                                                
  140.                                                                 if(Vaver>1.52 || Vaver<1.48) K =K + outPIDCalc(Vaver);//計(jì)算電壓調(diào)制系數(shù)
  141.                                                                 if(K>990)                        K=990;//限幅處理
  142.                                                                 else if(K<300)        K = 300;        
  143.                                                                
  144.                                                                 if(temp<2.95)
  145.                                                                 {
  146.                                                                         GPIO_SetBits(GPIOA,GPIO_Pin_8);        
  147.                                                                         GPIO_ResetBits(GPIOD,GPIO_Pin_2);               
  148.                                                                 }
  149.                                                                 else if(temp>3.05)
  150.                                                                 {
  151.                                                                         GPIO_SetBits(GPIOD,GPIO_Pin_2);                                                  //PD.2 輸出高
  152.                                                                         GPIO_ResetBits(GPIOA,GPIO_Pin_8);                                       
  153.                                                                 }
  154.                                                                
  155.                                                                 if(Vaver2>2.5)
  156.                                                                 {
  157.                                                                         GPIO_SetBits(GPIOC,GPIO_Pin_4);               
  158.                                                                 }
  159.                                                                 else GPIO_ResetBits(GPIOC,GPIO_Pin_4);
  160.                                                                
  161.                                                                 sprintf((char*)string1, "%.3f", temp);                        //顯示設(shè)定電流值                                   
  162.                                                                 LCD_ShowString(74,20,string1,RED);
  163.                                                                 sprintf((char*)string2, "%.3f", Vaver);        //顯示電壓值
  164.                                                                 LCD_ShowString(74,40,string2,RED);                                                         
  165.                                                                 sprintf((char*)string4, "%.3f", Iaver2);        //顯示電壓值
  166.                                                                 LCD_ShowString(74,60,string4,RED);                                                         
  167.                                                                 sprintf((char*)string5, "%.3f", Vaver2);        //顯示電壓值
  168.                 LCD_ShowString(74,120,string5,RED);                                                               
  169. //                                                          sprintf((char*)string, "%d", Iflag);                        //顯示設(shè)定電流值        
  170. //                LCD_ShowString(100,110,200,16,16,string);        
  171.                                                                                                                                 
  172.                                                                 g_ADCflag = 0;        g_adc = 0;        //標(biāo)志位置0                                                                                       
  173.                                         }
  174. //                                LCD_Clear(WHITE);
  175.                     delay_ms(40);
  176.                 }
  177. }

  178. void TIM3_IRQHandler(void)
  179. {
  180.         if ( TIM_GetITStatus(TIM3 , TIM_IT_Update) != RESET )
  181.         {        
  182.                 if(g_adc < 50)//電流電壓采集
  183.                 {
  184.                         V[g_adc] = ADaverage(0);
  185.                         I[g_adc] = ADaverage(1);
  186.       t[g_adc] = ADaverage(2);
  187.                         m[g_adc] = ADaverage(3);
  188.                               
  189.                         g_adc++;
  190.                 }
  191.                 else if(g_adc >=50)
  192.                         g_ADCflag = 1;                                                
  193.         TIM_ClearITPendingBit(TIM3 , TIM_FLAG_Update);
  194. }        
  195. }
復(fù)制代碼

所有程序51hei提供下載:
2015 E-OLED.7z (223.08 KB, 下載次數(shù): 107)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2019-7-24 03:52 | 只看該作者
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

板凳
ID:511461 發(fā)表于 2019-7-24 10:15 | 只看該作者
電路原理圖就是第一張圖片,源碼也已分享,再補(bǔ)一個(gè)LCD的
回復(fù)

使用道具 舉報(bào)

地板
ID:511461 發(fā)表于 2019-7-24 10:16 | 只看該作者
這是迷你版自帶的LCD的程序

2015 E - LCD.7z

251.83 KB, 下載次數(shù): 18, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報(bào)

5#
ID:511461 發(fā)表于 2019-7-25 08:17 | 只看該作者
這是STM32自帶的LCD

2015 E - LCD.7z

251.83 KB, 下載次數(shù): 23, 下載積分: 黑幣 -5

評分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

6#
ID:420744 發(fā)表于 2019-7-30 10:06 | 只看該作者
aaaaaa。 發(fā)表于 2019-7-24 10:15
電路原理圖就是第一張圖片,源碼也已分享,再補(bǔ)一個(gè)LCD的

圖有點(diǎn)模糊可以發(fā)成文件形式嗎
回復(fù)

使用道具 舉報(bào)

7#
ID:696302 發(fā)表于 2020-3-10 11:53 | 只看該作者
標(biāo)記一下 等著學(xué)習(xí)~~~~~~
回復(fù)

使用道具 舉報(bào)

8#
ID:574873 發(fā)表于 2020-3-10 15:16 | 只看該作者
還是很強(qiáng)大的哦,標(biāo)記下,以后學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品免费 | 国产在线一区观看 | 亚洲精品国产第一综合99久久 | 黑人巨大精品欧美一区二区免费 | 亚洲视频一区在线观看 | 日本久久www成人免 成人久久久久 | 日本一区视频在线观看 | 欧美a在线 | 99精品国产一区二区三区 | 精品不卡| 偷拍自拍网址 | 97免费在线视频 | 午夜精品福利视频 | 欧美一区2区三区4区公司 | 国产亚洲一区二区在线观看 | 天天拍天天操 | 欧美一区二区三区 | 国产精品自拍啪啪 | 国产一区二区三区 | 国产日韩欧美在线观看 | 欧美精品免费观看二区 | 国产精品国产三级国产aⅴ中文 | 日韩中文字幕av | 久久久久久亚洲精品 | 日韩精品免费一区二区在线观看 | 日本精品一区二区三区在线观看视频 | 国产精品精品久久久 | 在线亚洲一区 | 国产在线视频三区 | 精品免费国产视频 | 久久999| 免费亚洲网站 | 国产精品成人品 | 一区欧美 | 亚洲激情视频在线 | 国产欧美视频一区二区三区 | 成人在线视频观看 | 午夜日韩 | 久久综合伊人 | av黄色国产 | 亚洲精品国产一区 |