Форум 3DNews
Вернуться   Форум 3DNews > Программирование > Программирование

Ответ Создать новую тему
 
Опции темы Опции просмотра
Старый 03.08.2005, 21:33   [включить плавающее окно]   #1
toptyg
Мужской Бывалый
Автор темы
 
Аватар для toptyg
 
Регистрация: 11.01.2005
Адрес: Санкт-Петербург
Com port

Всем привет.

Есть электоро мотор(на 3V самый обычный), есть com порт и штепсель для него.

Задача: Все енто собрать и сделать так, чтобы можно было изменять скорость оборотов програмно.(изменяя напряжение например) Пишу на С/VC++, изучение ASM не желательно.

Могло бы помочь сведения по работе com порта(устройству, где плюс где минус ) и др. с темой связанные.

PS На электро мотор одевается винт и получается пропеллер.
__________________
В каждом положении отыщется что-нибудь утешительное, если хорошо поискать. /Д. Дефо/
toptyg вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 03.08.2005, 21:58   [включить плавающее окно]   #2
Andron_
Мужской Заслуженный
 
Аватар для Andron_
 
Регистрация: 01.02.2004
Адрес: Новосибирск
toptyg
да просто так никак не сделаешь... нужен контролер, который бы получал команды из com и регулировал обороты на их основе...
по работе с com портом инфы тьма, google.ru рулит.... тока у него не такой принцип работы, как ты представляешь...
__________________
Дилетант широкого профиля. По совместительству преподаватель С/С++.
Andron_ вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 04.08.2005, 22:07   [включить плавающее окно]   #3
toptyg
Мужской Бывалый
Автор темы
 
Аватар для toptyg
 
Регистрация: 11.01.2005
Адрес: Санкт-Петербург
Andron_
Цитата
по работе с com портом инфы тьма
Ну приведи хоть пару стоящих статей...
(где ни спрашиваю все молчат ----по поводу инфы)
__________________
В каждом положении отыщется что-нибудь утешительное, если хорошо поискать. /Д. Дефо/
toptyg вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 04.08.2005, 22:24   [включить плавающее окно]   #4
Andron_
Мужской Заслуженный
 
Аватар для Andron_
 
Регистрация: 01.02.2004
Адрес: Новосибирск
toptyg
хм... в ХП сом порт ведет себя как файл - т.е. просто что-то пишется либо считывается... поиск на borland.xportal.ru рулит...там регулярно кто-то справшивает про работу с сом портом...
вот я экспериментировал с СОМ-портом в Билдере.... тут лишнего 2 вагона, но лень сейчас лишнее вырезать...
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

#define COM_PORT_STRING "COM6"
#define COM_BAUD_RATE  9600
#define COM_DATA_BYTE_SIZE 8
#define COM_PARITY NOPARITY
#define COM_STOP_BIT ONESTOPBIT

static BOOL fComInit=false;
HANDLE hCom=NULL;

#define BUF_SIZE 32800
#define REAL_BUF_SIZE 32768

void initcom2();
void rd();

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void initcom2()
{
 COMMTIMEOUTS tmouts;
 DWORD MEss;
/* hCom=CreateFile(COM_PORT_STRING,
                GENERIC_READ|GENERIC_WRITE,
                0,
                NULL,
                OPEN_EXISTING,
                0,
                NULL);    */
 hCom=CreateFile("COM2", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
 MEss=GetLastError();
 LPTSTR lpMsgBuf; 
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,GetLastError(),
              MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPTSTR) &lpMsgBuf,0,NULL);
MessageBox( NULL, lpMsgBuf, "GetLastError", MB_OK|MB_ICONINFORMATION );
LocalFree( lpMsgBuf );
 GetCommTimeouts(hCom, &tmouts);
 tmouts.ReadIntervalTimeout=1000;
 tmouts.ReadTotalTimeoutMultiplier=1;
 tmouts.ReadTotalTimeoutConstant=10;
 SetCommTimeouts(hCom,&tmouts);
 if(INVALID_HANDLE_VALUE == hCom)
        {
         hCom=NULL;
        }
 else
        {
         DCB dcb;
         GetCommState (hCom, &dcb);
         dcb.BaudRate=COM_BAUD_RATE;
         dcb.ByteSize=COM_DATA_BYTE_SIZE;
         dcb.Parity=COM_PARITY;
         dcb.StopBits=COM_STOP_BIT;
         SetCommState(hCom, &dcb);
        }
 if(!fComInit)
        {
         fComInit=true;
        }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
 CloseHandle(hCom);
}
//---------------------------------------------------------------------------

void rd()
{
 Form1->Edit1->Text="";
 Application->ProcessMessages();
 CHAR szLicKeyRead[BUF_SIZE];
 UINT cbRead;
 ULONG cbWasRead;
 UINT cb;
 cb=BUF_SIZE;
 cbRead=cb*sizeof(CHAR);
 ReadFile(hCom,szLicKeyRead,cbRead,&cbWasRead,NULL);
 if (cbWasRead<=0)
        {
         Form1->Edit1->Text="Ничего не прочитано";
        }
 else
        {
         Form1->Edit1->Text=cbWasRead;
        }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 initcom2();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
 rd();        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
COMMCONFIG  comm;
if (GetDefaultCommConfig("\\\\.\\Serial1",&comm,&comm.dwSize))
{
switch  (comm.dwProviderSubType)
{
case  PST_FAX :
Form1->Caption="FAX device ";
break;
case  PST_LAT :
Form1->Caption="LAT protocol";
   break;
case  PST_MODEM :
Form1->Caption= "Modem device ";
break;
case  PST_NETWORK_BRIDGE :
Form1->Caption="Unspecified network bridge ";
break;
case  PST_PARALLELPORT :
Form1->Caption="Parallel port ";
break;
case  PST_RS232 :
Form1->Caption="RS-232 serial port ";
break;
case  PST_RS422 :
Form1->Caption= "RS-422 port ";
break;
case  PST_RS423 :
Form1->Caption="RS-423 port ";
break;
case  PST_RS449 :
Form1->Caption="RS-449 port ";
break;
case  PST_SCANNER :
Form1->Caption= "Scanner device ";
break;
case  PST_TCPIP_TELNET :
Form1->Caption="TCP/IP TelnetR protocol ";
break;
case  PST_UNSPECIFIED :
Form1->Caption= "Unspecified ";
break;
case  PST_X25 :
Form1->Caption="X.25 standards ";
break;
    default :
Form1->Caption="?????? Microsft mail please  ....";
break;
}
}
else Form1->Caption="Неизвестный";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)
{
COMMCONFIG comm;
CommConfigDialog("\\\\.\\Serial1",NULL,&comm);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)
{
 hCom = CreateFile( "\\\\.\\Serial1",
                          GENERIC_READ,
                          NULL,
                          NULL, 
                          OPEN_EXISTING, 
                          FILE_FLAG_OVERLAPPED,
                          NULL 
                          );

if (hCom == INVALID_HANDLE_VALUE)
{ 
  MessageBox (0, "Invalid Handle Value", "ERROR!", MB_OK); 
}
}
//---------------------------------------------------------------------------

Andron_ добавил :

основные функции void initcom2(); void rd(); и TForm1::Button5Click
__________________
Дилетант широкого профиля. По совместительству преподаватель С/С++.
Andron_ вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 05.08.2005, 04:33   [включить плавающее окно]   #5
Benedict
Интересующийся
 
Регистрация: 19.06.2004
toptyg
VC++, говоришь? Тогда что такое MSDN Library тебе известно. Если не хочется читать сухой справочный материал, читай статью "Serial Communications in Win32". Примерно то же самое по-русски: "Работа c СОМ-портами в Win32".
Вот только не знаю, чем это в твоей задаче поможет. Если только ты знаком с электроникой, и слова "буфер" и ЦАП тебя не пугают. Если всё же пугают, посмотри лучше в сторону параллельного порта - может, нескольких резисторов и пары транзисторов хватит.
__________________
А доктор всё не едет...
Benedict вне форума  
Ответить с цитированием
Старый 05.08.2005, 23:34   [включить плавающее окно]   #6
toptyg
Мужской Бывалый
Автор темы
 
Аватар для toptyg
 
Регистрация: 11.01.2005
Адрес: Санкт-Петербург
Andron_
Цитата
сом порт ведет себя как файл - т.е. просто что-то пишется либо считывается...
Это я знал. За слинк сенкс,
Цитата
вот я экспериментировал с СОМ-портом в Билдере...
эксперимент проведу повторно.

Benedict
Пасибо, но действительно хотелось технических сведений.
Какую МАХ силу тока он может выдать???
(1 2 3 4 5) 4ый выход(+6V МАХ,+1V в простои --сам мерил),5ый юзаю как землю.
(6 7 8 9)

PS Ток переменный. ,мотор для постоянного.
__________________
В каждом положении отыщется что-нибудь утешительное, если хорошо поискать. /Д. Дефо/
toptyg вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 06.08.2005, 00:07   [включить плавающее окно]   #7
Andron_
Мужской Заслуженный
 
Аватар для Andron_
 
Регистрация: 01.02.2004
Адрес: Новосибирск
toptyg Ты никак не можешь понять, что СОМ-порт - цифровой интерфейс, он может передавать только последовательности прямоугольных импульсов высотой 1В ("ноль") или 25В ("единица"), точно напряжения не помню, но в этом районе. Как твой мотор будет распознавать эти наборы импульсов? Он что, вундеркинд? Чтобы юзать СОМ для этой цели нужна ЦАПа - а это уже выше уровня огородника-любителя. Здесь нужны знания не только электроники, но еще и микроконтроллеров.
Проще заюзать LPT порт - им можно управлять так, что на нужном числе ножек будет постоянный ноль,а на другом - единица. Устройство управления двигателем в этом случае будет проще, но этот вариант приемлем если ты хоть что-то понимаешь в электронике и схемотехнике.
А допустимые токи тебе никто не скажет, потмоу что в СОМ нет контактов, предназначенных для питания устройств, т.е. только контакты данных и статусов... поиск по сабжу "распайка COM порта" рулит.
__________________
Дилетант широкого профиля. По совместительству преподаватель С/С++.

Последний раз редактировалось Andron_; 06.08.2005 в 00:10.
Andron_ вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 06.08.2005, 00:34   [включить плавающее окно]   #8
toptyg
Мужской Бывалый
Автор темы
 
Аватар для toptyg
 
Регистрация: 11.01.2005
Адрес: Санкт-Петербург
Цитата
Как твой мотор будет распознавать эти наборы импульсов?
Единицу посылаешь много раз--крутится быстрее, меньше --медленние.
(просто напряжение ~ => диодный мост, а это усложнение конструкции. )

Цитата
Проще заюзать LPT порт
подумаю над этим.
__________________
В каждом положении отыщется что-нибудь утешительное, если хорошо поискать. /Д. Дефо/
toptyg вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 06.08.2005, 18:41   [включить плавающее окно]   #9
Andron_
Мужской Заслуженный
 
Аватар для Andron_
 
Регистрация: 01.02.2004
Адрес: Новосибирск
[QUOTE=toptyg]
Цитата
Единицу посылаешь много раз--крутится быстрее, меньше --медленние.

Цитата
(просто напряжение ~ => диодный мост, а это усложнение конструкции. )
Диодный мост здесь абсолютно бесполезен, потому что напряжение будет однополупериодное... Сгладить пульсации помогут конденсаторы. Но вся эта приблуда не выжгет порт только если собрать усилитель на транзисторе. а вот включение конденсаторов в управляющую цепь лихо, с дымком, выжгет микросхемы порта обратным импульсом в 24 вольта при смене уровня сигнала на порте... Вообще, не советовал бы я тебе заниматься этой приблудой с такими знаниями по электронике... тем более с такими ярыми стремлениягми сделать все проще, даже не имея представления о задаче...
__________________
Дилетант широкого профиля. По совместительству преподаватель С/С++.
Andron_ вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 08.08.2005, 20:51   [включить плавающее окно]   #10
toptyg
Мужской Бывалый
Автор темы
 
Аватар для toptyg
 
Регистрация: 11.01.2005
Адрес: Санкт-Петербург
Andron_
Цитата
он может передавать только последовательности прямоугольных импульсов высотой 1В ("ноль") или 25В ("единица")
Цитата
с дымком, выжгет микросхемы порта обратным импульсом в 24 вольта при смене уровня сигнала на порте.
Откуда такие такие сведения?

+6 там сам замерял.(+1В сгласен)

toptyg добавил :

Andron_
Цитата
Вообще, не советовал бы я тебе заниматься этой приблудой с такими знаниями по электронике... тем более с такими ярыми стремлениягми сделать все проще, даже не имея представления о задаче...
Вот я и хочу с чего -нибудь начать.
__________________
В каждом положении отыщется что-нибудь утешительное, если хорошо поискать. /Д. Дефо/
toptyg вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 08.08.2005, 21:12   [включить плавающее окно]   #11
Johnnie Walker
Опытный
 
Регистрация: 28.04.2004
toptyg, вообще для таких вещей контроллеры не зря придумали. Прямо к порту цеплять двигатель - это фантастика.
Johnnie Walker вне форума  
Ответить с цитированием
Старый 08.08.2005, 21:27   [включить плавающее окно]   #12
Andron_
Мужской Заслуженный
 
Аватар для Andron_
 
Регистрация: 01.02.2004
Адрес: Новосибирск
toptyg
Цитата (toptyg) »
Откуда такие такие сведения?
http://www.google.com/search?hl=ru&q...1%81%D0%BA&lr= первая ссылка
единственное, с нижним уровнем я ошибся - 3 а не 1...
А почему выжгет ... а потому что... электроника рулит... при зарядке через в конденсатор течет в одном направлении, а при разрядке в другом. А появлении на выходе "0" вместо "1" конденсатор как раз начнет разряжаться...
Цитата
Вот я и хочу с чего -нибудь начать.
Начни с электроники... с конденсаторов, диодов, транзисторов и пр... Только вот толку не будет, потому что если никогда не занимался радиолюбительством, и в ВУЗе этому не учили, бесполезно, потому что времени, сил и средств потребуется очень много...
короче, "Забей, Сеня" ©Дмитрий Пучковaka Гоблин
__________________
Дилетант широкого профиля. По совместительству преподаватель С/С++.
Andron_ вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 09.08.2005, 11:10   [включить плавающее окно]   #13
Benedict
Интересующийся
 
Регистрация: 19.06.2004
toptyg
Я уже давал ссылку на сайт www.rs232.ru. Там есть информация как об электрических спецификациях, так и о некоторых схемотехнических решениях. Там даже есть статья как раз для начинающих для решения обратной задачи (измерений).
__________________
А доктор всё не едет...

Последний раз редактировалось Benedict; 09.08.2005 в 11:15.
Benedict вне форума  
Ответить с цитированием
Старый 12.08.2005, 01:10   [включить плавающее окно]   #14
toptyg
Мужской Бывалый
Автор темы
 
Аватар для toptyg
 
Регистрация: 11.01.2005
Адрес: Санкт-Петербург
Andron_
По повду +24V
Есть код
Код:
#include "stdio.h"
#include "conio.h"
#include "windows.h"

//HANDLE CreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDistribution, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);

int main(void)
{
for (int i=1;i<4;i++)
{
HANDLE hCOM=CreateFile("COM1",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 
if (hCOM!=INVALID_HANDLE_VALUE) 
{ 
cout << "COM1 is open OK!" << endl; 
char buffer[30]="qwewqweqwe "; 
memset(buffer,0,sizeof(buffer)); 
strcpy(buffer,"SAVE TO COM1"); 
DWORD nb; 
OVERLAPPED ov; 
WriteFile(hCOM,buffer,sizeof(buffer),&nb,&ov); 
CloseHandle(hCOM); 
} 

else cout << "Error Open COM1" << endl;

}
}
Есть вольтметр(и местами прямые руки)

Вот при выполнении его и замере вольтметром---6V между указаными контактами( 5и4 ый ).

При измерении напруги в простои----1V!!!!

Benedict Я поразбираюсь дальше попозже, сейчас дел не в проворот.

PS Я учусь в Политехе, на фак технической кибернетики (сист автомат управления) правда тока на 2ой курс перешел
__________________
В каждом положении отыщется что-нибудь утешительное, если хорошо поискать. /Д. Дефо/
toptyg вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 12.08.2005, 02:41   [включить плавающее окно]   #15
Benedict
Интересующийся
 
Регистрация: 19.06.2004
toptyg
Речь о RS-232C:
Цитата (Упомянутый сайт) »
Логической единице (состояние MARK) на входе данных (сигнал RxD) соответствует диапазон напряжения от –12 до –3 В; логическому нулю — от +3 до +12 В (состояние SPACE). Для входов управляющих сигналов состоянию ON (“включено”) соответствует диапазон от +3 до +12 В, состоянию OFF (“выключено”) — от –12 до –3 В. Диапазон от –3 до +3 В — зона нечувствительности, обусловливающая гистерезис приемника: состояние линии будет считаться измененным только после пересечения порога (рис. 3). Уровни сигналов на выходах передатчиков должны быть в диапазонах от –12 до –5 В и от +5 до +12 В.
Упрямство, достойное лучшего применения. Ну ничего, к 4-му курсу поймёшь, что в ВУЗе учат работать с источниками информации, а не с вольтметром.
__________________
А доктор всё не едет...

Последний раз редактировалось Benedict; 12.08.2005 в 02:49.
Benedict вне форума  
Ответить с цитированием
Старый 12.08.2005, 20:11   [включить плавающее окно]   #16
toptyg
Мужской Бывалый
Автор темы
 
Аватар для toptyg
 
Регистрация: 11.01.2005
Адрес: Санкт-Петербург
Ну вот купил LED (за 1руб ) воткнул -----мигает как я захочу.
Будем копать дальше.
__________________
В каждом положении отыщется что-нибудь утешительное, если хорошо поискать. /Д. Дефо/
toptyg вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 12.08.2005, 21:40   [включить плавающее окно]   #17
Andron_
Мужской Заслуженный
 
Аватар для Andron_
 
Регистрация: 01.02.2004
Адрес: Новосибирск
toptyg Мдам.... Ну дерзай Успехов... Только мощное ничего не подключай...
__________________
Дилетант широкого профиля. По совместительству преподаватель С/С++.
Andron_ вне форума  
Конфигурация ПК
Ответить с цитированием
Старый 02.09.2005, 21:08   [включить плавающее окно]   #18
DrDoom
Мужской Новенький
 
Регистрация: 01.09.2005
Цитата
А допустимые токи тебе никто не скажет, потмоу что в СОМ нет контактов, предназначенных для питания устройств, т.е. только контакты данных и статусов... поиск по сабжу "распайка COM порта" рулит.
Точно, тока от COM порта никакого, тем более для движки. Правда, если движка не сильно мощная по потребляемому току, можно попробовать запитаться от USB порта (вроде 100 мА по умолчанию) через простенький транзисторный каскад. Управление при этом будет идти от COM порта ( используя вышеописанный ШИМ - "0","1").
DrDoom вне форума  
Ответить с цитированием
Ответ Создать новую тему

Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 04:50. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 2000-2017 3DNews. All Rights Reserved.
Администрация 3DNews требует соблюдения на форуме правил и законов РФ
Серверы размещены в Hostkey