OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2354|回复: 11

关于CCD的问题

[复制链接]

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2017-8-8
在线时间
19 小时
发表于 2017-8-25 23:30:19 | 显示全部楼层 |阅读模式
1金钱
CCD像素点的值和ADC采集电压有什么关系?

最佳答案

查看完整内容[请看2#楼]

没搞懂你说的什么意思。图像传感器都是感应电荷最终还是要经过放大器转为电压采集。现在买的成品图像传感器里面都是内置AD的,只需要供电采集信号就行。至于哪个点什么时候采出这个需要看手册。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2017-6-18
在线时间
26 小时
发表于 2017-8-25 23:30:20 | 显示全部楼层
没搞懂你说的什么意思。图像传感器都是感应电荷最终还是要经过放大器转为电压采集。现在买的成品图像传感器里面都是内置AD的,只需要供电采集信号就行。至于哪个点什么时候采出这个需要看手册。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-8-26 00:32:26 | 显示全部楼层
CCD和ADC什么关系?
回复

使用道具 举报

6

主题

60

帖子

0

精华

高级会员

Rank: 4

积分
863
金钱
863
注册时间
2016-2-17
在线时间
192 小时
发表于 2017-8-26 12:37:44 来自手机 | 显示全部楼层
和ADC的位数有关系,和电压没关系
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2017-8-8
在线时间
19 小时
 楼主| 发表于 2017-8-27 08:27:31 | 显示全部楼层
我表述不太明白。我重新说一下我遇到的问题。我用线性CCD(128*1像素),AO1(原始信号输出)通过ADC采集信号,然后存到一个数组里,然后通过串口打印数组的各个元素。得到的值在(220到3000多),ADC采集的是电压信号,然后我希望的输出像素灰度值(0-255),所以我才问上面那个问题。没有说的太明白,抱歉。
以下是我的代码
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2017-8-8
在线时间
19 小时
 楼主| 发表于 2017-8-27 08:28:28 | 显示全部楼层
CCD file:
#include "ccd.h"
#include "delay.h"

void CCD_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOC, ENABLE );       
          
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //ÍÆÍìÊä³ö
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
       
}

void CCDstart(u16*p, u16*q)
{
        int i=0;
   CCD_CLK=1;
         CCD_IS =1;
         delay_us(2);
         CCD_CLK=0;
         CCD_IS=0;
         delay_us(2);
        for(i=0;i<128;i++)
         {
           CCD_CLK=1;
                 delay_us(2);
     CCD_CLK=0;
                 delay_us(2);
         }
         delay_ms(5);
         CCD_IS=1;
         delay_us(2);
          CCD_CLK=1;
          delay_us(2);
          p[0]=q[0];
          CCD_CLK=0;
          CCD_IS=0;
         for(i=1;i<128;++i)
         {
           CCD_CLK=1;
                 delay_us(2);
                 p[i]=q[i];
     CCD_CLK=0;
                 delay_us(2);
         }
          CCD_CLK=1;
          delay_us(2);
          CCD_CLK=0;
          delay_us(2);
}
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2017-8-8
在线时间
19 小时
 楼主| 发表于 2017-8-27 08:30:26 | 显示全部楼层
TIMER file:
#include "timer.h"
#include "ccd.h"
#include "adc.h"

u16 putlevel[128];
u16 put=0;
void TIM3_Init(void)
{


        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);

        TIM_TimeBaseStructure.TIM_Period =499;
        TIM_TimeBaseStructure.TIM_Prescaler =7199;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
        TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);

        TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);
        NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;  
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;  
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);  

        TIM_Cmd(TIM6, ENABLE);  


}

void TIM6_IRQHandler(void)       
{
        u32 sum=0;
        int i;
   if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)
         {
                 CCDstart(putlevel,getlevel);
                 for(i=1;i<128;++i)
                 {
                   put=(u16)(putlevel[i]);
//                                                          printf("%d\r ",putlevel[i]);
                 }
                //put=fliter(putlevel);
         
         }
  TIM_ClearITPendingBit(TIM6, TIM_IT_Update);

}

回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2017-8-8
在线时间
19 小时
 楼主| 发表于 2017-8-27 08:52:25 | 显示全部楼层
ADC file:
#include "adc.h"
#include "delay.h"

u16 getlevel[128];
void  Adc_Init(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{   
    ADC_InitTypeDef       ADC_InitStructure;                                      
    DMA_InitTypeDef       DMA_InitStructure;                                
    GPIO_InitTypeDef      GPIO_InitStructure;                                   


        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
   
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOA, ENABLE);


         DMA_DeInit(DMA1_Channel1);
         DMA_InitStructure.DMA_BufferSize=cndtr;  
         DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;                             
         DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;                    
         DMA_InitStructure.DMA_MemoryBaseAddr=cmar;                        
         DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;            
         DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;                        
         DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;                        
         DMA_InitStructure.DMA_PeripheralBaseAddr= cpar;                          
         DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;      
         DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;            
         DMA_InitStructure.DMA_Priority=DMA_Priority_Medium;                               
         DMA_Init(DMA_CHx, &DMA_InitStructure);                                    
         DMA_Cmd(DMA_CHx, ENABLE);                                                       


  
         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//&#178;&#201;&#188;&#175;&#181;&#231;&#209;&#185;&#181;&#196;&#210;&#253;&#189;&#197;&#206;&#170A0
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;                                 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                        
    GPIO_Init(GPIOA, &GPIO_InitStructure);  


    //ADC1 &#179;&#245;&#202;&#188;&#187;&#175; ****************************************************************/
    ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;                        
        ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;                          
        ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;            
        ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;                              
        ADC_InitStructure.ADC_NbrOfChannel=1;                                      
        ADC_InitStructure.ADC_ScanConvMode=ENABLE;                                 
        ADC_Init(ADC1, &ADC_InitStructure);                                                    
       
       
    ADC_RegularChannelConfig(ADC1,ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);

   

    ADC_Cmd(ADC1, ENABLE);
       

    ADC_DMACmd(ADC1, ENABLE);
  
        ADC_ResetCalibration(ADC1);                      
         
        while(ADC_GetResetCalibrationStatus(ADC1));       
       
        ADC_StartCalibration(ADC1);                      

        while(ADC_GetCalibrationStatus(ADC1));
   
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);
       
}
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2017-8-8
在线时间
19 小时
 楼主| 发表于 2017-8-27 08:53:50 | 显示全部楼层
main:

#include "adc.h"
#include "ccd.h"
#include "timer.h"

int main(void)
{
        int i;
        CCD_Init();
        Adc_Init(DMA1_Channel1,(uint32_t)&ADC1->DR,(uint32_t)getlevel,128);
        TIM3_Init();
        CCDstart(putlevel,getlevel);
while(1)
        {
                printf("%d\r ",put);
                delay_ms(100);
  }
}
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2017-8-8
在线时间
19 小时
 楼主| 发表于 2017-8-27 09:57:20 | 显示全部楼层
这是我的摄像头tsl1401代码。得出来的数据:
黑色:
671
682
669
682
695
1183
684
657
667
664
632
652
622
637
630
618
650
652
606
624
687
685
682
639
682
758
715
684
612
599
671
606
588
589
511
572
638
650
632
511
511
554
612
657
605
白色:
4095
3134
4095
4095
4095
4095
4095
4095
4095
4095
4095
4095
4095
4095
4095
4095
4095
4095
4095
4095
4095
4095
3818
4095
4095
4095
3029
2278
2910
2825
2651
2602
2242
2870
2819
2642
2466
2021
1923
2707
2455
2163
1957
2640
2645
2518
2295
1915
2504
2525
2373
2111
1746
2446
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2017-8-8
在线时间
19 小时
 楼主| 发表于 2017-8-27 21:05:34 | 显示全部楼层
解决了,原来摄像头有放大输出引脚,她可以直接输出像素的灰度值。
回复

使用道具 举报

0

主题

9

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2017-9-1
在线时间
2 小时
发表于 2017-9-1 09:34:29 | 显示全部楼层
CCD像素点的值=CCD电压*得到的值/2^分辨率位数
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 19:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表