查看: 4048|回复: 8

光伏电池控制

[复制链接]
  • TA的每日心情
    开心
    2018-3-29 09:22
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2016-3-15 23:15:24 | 显示全部楼层 |阅读模式
    分享到:
    此方案是采用GD32F207ZE作为主控制器的太阳能光伏充电控制器,可对以下主要的类型电池组实现充电管理:(铅酸电池组,普通锂电池组,铁锂电池组….等等)并且使用LCD显示光伏板电压,电池组电压和控制器温度(因为年末时间比较少,就简化了控制器的附加高级功能。(例如:可以再添加电流传感器,实现功率可控-发电电量累计和手机APP查看和设置参数。以及通过wifi实时上传物联网平台。。))有喜欢的利用本方案自己再添加高级功能。。。本控制器使用串口输入设置参数,为了后期可以使用蓝牙模块配合APP预留的功能,本控制器具有电池过压保护,控制器过温保护功能,夜间防逆流功能,
    具有最大化利用光伏发电板,使其输出最大功率状态给电池组充电,实现绿色能源最大使用效益。。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-3-29 09:22
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-3-15 23:17:32 | 显示全部楼层
    方案结构如下图所示:
    1.jpg
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-3-29 09:22
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-3-15 23:20:40 | 显示全部楼层
      使用的GD32F207资源配置:配置DMAIDLE方式接收串口数据,配置5个DMAADC通道获取数据,配置TIMER2 2个通道PWM输出控制,配置SPI1显示数据,配置内部FLASH作为设置参数的掉电存储
    1.jpg
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-3-29 09:22
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-3-15 23:25:31 | 显示全部楼层
    所用液晶原理图如下所示
    1.jpg
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-3-29 09:22
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-3-15 23:27:47 | 显示全部楼层
    TIMER2 PWM输出配置程序(用库):配置PA1 PA2
    void TIM_Configuration(void)
    {
         /* -----------------------------------------------------------------------
         TIMER2 Configuration: generate 2 PWM signals with 2 different duty cycles:
         TIMER2CLK = SystemCoreClock / 8 = 9MHz
         TIMER2 frequency = 180/9M = 0.02ms

         ----------------------------------------------------------------------- */
         TIMER_BaseInitPara TIMER_TimeBaseStructure;
         TIMER_OCInitPara   TIMER_OCInitStructure;

         /* TIMER2 clock enable */
         RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_TIMER2,ENABLE);

         /* TIMER2  configuration */
         TIMER_DeInit(TIMER2);
         TIMER_TimeBaseStructure.TIMER_Prescaler     = 8-1;
         TIMER_TimeBaseStructure.TIMER_CounterMode   = TIMER_COUNTER_UP;
         TIMER_TimeBaseStructure.TIMER_Period        = 180-1;
         TIMER_TimeBaseStructure.TIMER_ClockDivision = TIMER_CDIV_DIV1;
         TIMER_BaseInit(TIMER2,&TIMER_TimeBaseStructure);

         /* CH2,CH3 and CH4 Configuration in PWM mode */
         TIMER_OCInitStructure.TIMER_OCMode      = TIMER_OC_MODE_PWM1;
         TIMER_OCInitStructure.TIMER_OCPolarity  = TIMER_OC_POLARITY_HIGH;
         TIMER_OCInitStructure.TIMER_OutputState = TIMER_OUTPUT_STATE_ENABLE;
         TIMER_OCInitStructure.TIMER_OCIdleState = TIMER_OC_IDLE_STATE_RESET;

         TIMER_OCInitStructure.TIMER_Pulse = 0;
         TIMER_OC2_Init(TIMER2, &TIMER_OCInitStructure);
         TIMER_OC2_Preload(TIMER2,TIMER_OC_PRELOAD_DISABLE);

         TIMER_OCInitStructure.TIMER_Pulse = 0;
         TIMER_OC3_Init(TIMER2, &TIMER_OCInitStructure);
         TIMER_OC3_Preload(TIMER2,TIMER_OC_PRELOAD_DISABLE);

         /* Auto-reload preload enable */
         TIMER_CARLPreloadConfig(TIMER2,ENABLE);
         /* TIMER enable counter*/
         TIMER_Enable( TIMER2, ENABLE );
    }
    复制代码
    FMC 存储数据函数:
    void FMC_savedate(void)
    {
               uint8_t p=0,n=0,flashflag[3]={0};
         if(flashdate==1)
                     {
                     if(ReadData[0]>=PVMIN&&ReadData[0]<=PVMAX){backupData[0]=ReadData[0];flashflag[0]=1;}else{/*printf("PV SETTING ERROR\n\r");*/}
                     if(ReadData[1]>=BATMIN&&ReadData[1]<=BATMAX){backupData[1]=ReadData[1];flashflag[1]=1;}else{/*printf("BAT SETTING ERROR\n\r");*/}
                     if(ReadData[2]>=FANMIN&&ReadData[2]<=FANMAX){backupData[2]=ReadData[2];flashflag[2]=1;}else{/*printf("FAN TEMP SETTING ERROR\n\r");*/}        
         for(p=0;p<Savenumber;p++){ReadData[p]=0;}                        
                     if(flashflag[0]==1&&flashflag[1]==1&&flashflag[2]==1)
                     {        
         FMC_Unlock();
         
         /* Define the number of page to be erased */
         NbrOfPage = (BANK1_WRITE_END_ADDR - BANK1_WRITE_START_ADDR) / FMC_PAGE_SIZE;
         
         /* Clear All pending flags */
         FMC_ClearBitState(FMC_FLAG_EOP | FMC_FLAG_WERR | FMC_FLAG_PERR );
         
         /* Erase the FLASH pages */
         for(EraseCounter = 0; EraseCounter < NbrOfPage; EraseCounter++)
         {
             FMCStatus = FMC_ErasePage(BANK1_WRITE_START_ADDR + (FMC_PAGE_SIZE * EraseCounter));
             FMC_ClearBitState(FMC_FLAG_EOP | FMC_FLAG_WERR | FMC_FLAG_PERR );
         }  
         FMC_Lock();
                     
         /* Unlock the Flash Bank1 Program Erase controller */
         FMC_Unlock();
         
         /* Define the number of page to be erased */
         NbrOfPage = (BANK1_WRITE_END_ADDR - BANK1_WRITE_START_ADDR) / FMC_PAGE_SIZE;
         
         /* Clear All pending flags */
         FMC_ClearBitState(FMC_FLAG_EOP | FMC_FLAG_WERR | FMC_FLAG_PERR );   
             
         /* Program Flash Bank1 */
                     Address = BANK1_WRITE_START_ADDR;
                     for(save=0;save<Savenumber;save++)
                     {        
         FMCStatus = FMC_ProgramWord(Address, backupData[save]);
                     FMC_ClearBitState(FMC_FLAG_EOP | FMC_FLAG_WERR | FMC_FLAG_PERR );
                     Address+=4;
                     }
         FMC_Lock();

                     for(n=0;n<3;n++){flashflag[n]=0;}
                     reset=1;
              }
                     flashdate=0;
               
             }

    }
    复制代码
    串口DMA+IDLE中断接收数据
    void USART1_IRQHandler(void)
    {
               uint32_t tmp_flag = 0;
               uint32_t temp;
               tmp_flag=USART_GetIntBitState(USART1, USART_INT_IDLEF);
         if(tmp_flag!= RESET)
         {
                     DMA_Enable(DMA1_CHANNEL5, DISABLE);
                                             temp = USART1->STR;
               temp = USART1->DR;
                                             temp= DMA_GetCurrDataCounter(DMA1_CHANNEL5);;
                                             Length=BufferSize-temp;
                                 flag=1;
                                             DMA1_CHANNEL5->RCNT=BufferSize;
                                 DMA_Enable(DMA1_CHANNEL5,ENABLE);
                              }  
         __nop();  
    }
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-3-29 09:22
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-3-15 23:31:34 | 显示全部楼层
    void SPI1_Configuration(void)
    {
         SPI_InitPara  SPI_InitStructure;
         SPI_InitStructure.SPI_TransType = SPI_TRANSTYPE_FULLDUPLEX;
         SPI_InitStructure.SPI_Mode = SPI_MODE_MASTER;
         SPI_InitStructure.SPI_FrameFormat = SPI_FRAMEFORMAT_8BIT;
         SPI_InitStructure.SPI_SCKPL = SPI_SCKPL_HIGH;
         SPI_InitStructure.SPI_SCKPH = SPI_SCKPH_2EDGE;
         SPI_InitStructure.SPI_SWNSSEN = SPI_SWNSS_SOFT;
         SPI_InitStructure.SPI_PSC = SPI_PSC_4;
         SPI_InitStructure.SPI_FirstBit = SPI_FIRSTBIT_MSB;
         SPI_InitStructure.SPI_CRCPOL = 10;

         SPI_Init(SPI1, &SPI_InitStructure);
         SPI_Enable(SPI1, ENABLE);
                     SPIx_ReadWriteByte(0xff);

    }SPI初始程序(用库)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-3-29 09:22
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-3-15 23:40:40 | 显示全部楼层
    GD32F207向MDK添加

    MDK-ARM_AddOn_GD32F20x-V1.0.0.rar

    1.03 MB, 下载次数: 11

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-8-17 15:49
  • 签到天数: 46 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2016-4-25 16:43:30 | 显示全部楼层
    不错,谢谢分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-3-29 09:22
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-4-27 10:04:24 | 显示全部楼层
    相互学习
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-15 11:14 , Processed in 0.196475 second(s), 32 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.